C#使用带有元组项的.Count

时间:2014-03-25 16:58:40

标签: c# tuples

我试图比较列表中的多个元组的内容。代码运行良好,但在某些情况下,completeList[z].Item1.Count将返回错误的数字。当我查看调试器时,在一个示例中,当计数为9时,a = completeList[z].Item1.Count可能返回18.因此,这会导致它超出范围。

completeList.Count正确返回,completeList[z].Item1[b]也是如此,因此我不确定completeList[z].Item1.Count可能出错了什么。

感谢您的任何见解!

int x = completeList.Count;
int y = 0;
while (y < x)
{
 for (int z = 0; z < x; z++)
 {
  if (y != z && completeList[y].Item6.Equals(completeList[z].Item6))
  {
   int a = completeList[z].Item1.Count;
   a = a -1;
   for (int b = 0; b < a; b++)
   {
    if (completeList[y].Item1.Contains(completeList[z].Item1[b]))
    {
     completeList[z].Item1.RemoveAt(b);
     completeList[z].Item2.RemoveAt(b);
     completeList[z].Item3.RemoveAt(b);
     completeList[z].Item4.RemoveAt(b);
     completeList[z].Item5.RemoveAt(b);
    }
   }
  }
 }
 y++;
}

1 个答案:

答案 0 :(得分:0)

您正在从列表中删除项目。这会改变计数,也会移动现有项目的索引。循环开始时计数是正确的,但是当您实际删除项目时,计数不再有效。

最有效的解决方案是在删除项目时不迭代列表;而是依赖列表的RemoveAll方法删除与要删除的项目列表匹配的所有项目。虽然可能可以正确地管理索引以便在迭代时删除,但您应该避免这种复杂性。