如何遍历正在修改的列表?

Dav*_*nna 2 c# iteration list

我有一个数据集的行列表,我需要迭代.

问题是迭代中的处理可能会从列表中删除一行或多行.

由于列表正在被修改,我不能使用foreach()循环.

但是因为有可能某些删除可能发生在我正在处理的元素之前,我也不能使用for()循环(即,如果我正在处理元素,那导致元素的删除还有其他元素,我想不出一种方法来调整我以正确指向我正在处理的元素之后的元素.

你会如何解决这个问题?我目前认为总是处理列表中的第一个元素.如果它被删除,则处理新的第一个元素.如果它没有被删除,则将其移至"alreadyProcessed"列表,并处理新的第一个元素.

有没有更简单的方法?

Dav*_*vid 8

通常,这是通过反向循环完成的:

List<string> Items = ...
for(int i = Items.Count - 1; i >= 0; i--)
{
   if(Items[i] == "DELETE ME")
   {
      Items.RemoveAt(i);
   }
}
Run Code Online (Sandbox Code Playgroud)

这会导致以相反的顺序处理项目,因此如果删除项目,则不会影响仍要处理的任何项目的位置.