我正在尝试比较列表中多个元组的内容。代码运行良好,但在某些情况下,completeList[z].Item1.Count
会返回错误的数字。当我查看调试器时,在一个示例中,a = completeList[z].Item1.Count
可能会在计数为 9 时返回 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++;
}
最佳答案
您正在从列表中删除项目。这正在改变计数,并且还在现有项目的索引周围移动。计数在循环开始时是正确的,但当您实际删除一个项目时,计数不再有效。
最有效的解决方案是在删除项目时完全不迭代列表;而是依靠列表的 RemoveAll
方法来删除与要删除的项目列表匹配的所有项目。虽然您可以正确管理索引以在迭代时删除,但您应该避免这种复杂性。
关于C# 将 .Count 与元组项一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22641432/