我试图比较列表中的多个元组的内容。代码运行良好,但在某些情况下,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++;
}
答案 0 :(得分:0)
您正在从列表中删除项目。这会改变计数,也会移动现有项目的索引。循环开始时计数是正确的,但是当您实际删除项目时,计数不再有效。
最有效的解决方案是在删除项目时不迭代列表;而是依赖列表的RemoveAll
方法删除与要删除的项目列表匹配的所有项目。虽然可能可以正确地管理索引以便在迭代时删除,但您应该避免这种复杂性。