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

标签 c# list iteration

我有一个数据集中需要遍历的行列表。

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

由于正在修改列表,我不能使用 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/

相关文章:

c# - 如何首先在代码中获取具有外键关系的子实体中的父实体属性?

c# - 尝试设置 native 属性时动态关键字抛出 RunTimebinderException

c# - Roslyn:将 using 语句添加到语法树

list - 为什么 `(a) read as a list while ` (a b) 不是?

list - 如何在 Emacs Lisp 中设置列​​表中的部分参数?

java - 如何通过引用 Java 中包含数组的 HashMap 来向数组添加值?

flex3 - flex 3 遍历对象值

c# - 如何保护 OAuth key 不被用户反编译我的项目?

c# - 如果结构属性在列表中,为什么不能更改它们?

javascript - 在 React 中迭代表单元素数组