我有一个数据集中需要遍历的行列表。
问题在于迭代中的处理可能会从列表中删除一行或多行。
由于正在修改列表,我不能使用 foreach() 循环。
但由于某些删除可能发生在我正在处理的元素之前,我也不能使用 for() 循环(即,如果我正在处理元素,这会导致元素和其他元素的删除,我想不出一种方法来调整 i 以正确指向我正在处理的元素之后的元素)。
您将如何解决这个问题?我目前的想法是始终处理列表中的第一个元素。如果它被删除,处理新的第一个元素。如果它没有被删除,将它移动到“alreadyProcessed”列表,并处理新的第一个元素。
有没有更简单的方法?
最佳答案
通常这是通过反向循环完成的:
List<string> Items = ...
for(int i = Items.Count - 1; i >= 0; i--)
{
if(Items[i] == "DELETE ME")
{
Items.RemoveAt(i);
}
}
这会导致项目以相反的顺序处理,因此如果您删除一个项目,它不会影响任何仍待处理的项目的位置。
关于c# - 如何遍历正在修改的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1173110/