c# - 如何在迭代时从通用列表中删除元素?

标签 c# list loops generics key-value

我正在寻找一个更好的模式来处理一个元素列表,每个元素都需要处理,然后根据结果从列表中删除。

您不能使用 .Remove(element)foreach (var element in X) 里面(因为它会导致 Collection was modified; enumeration operation may not execute. 异常)...您也不能使用 for (int i = 0; i < elements.Count(); i++).RemoveAt(i)因为它会扰乱您当前在集合中相对于 i 的位置.

有没有一种优雅的方式来做到这一点?

最佳答案

使用 for 循环反向迭代您的列表:

for (int i = safePendingList.Count - 1; i >= 0; i--)
{
    // some code
    // safePendingList.RemoveAt(i);
}

例子:

var list = new List<int>(Enumerable.Range(1, 10));
for (int i = list.Count - 1; i >= 0; i--)
{
    if (list[i] > 5)
        list.RemoveAt(i);
}
list.ForEach(i => Console.WriteLine(i));

或者,您可以使用 RemoveAll method带有要测试的谓词:

safePendingList.RemoveAll(item => item.Value == someValue);

这里有一个简单的例子来演示:

var list = new List<int>(Enumerable.Range(1, 10));
Console.WriteLine("Before:");
list.ForEach(i => Console.WriteLine(i));
list.RemoveAll(i => i > 5);
Console.WriteLine("After:");
list.ForEach(i => Console.WriteLine(i));

关于c# - 如何在迭代时从通用列表中删除元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39008325/

相关文章:

c# - 如何将 Enum 值转换为常量 C#

java - ArrayList 添加的项被 for 循环中的下一项替换

python - 从 Python 中的展平数据生成嵌套列表

c# - 尝试优化 linq 查询

C#格式化数字

c# - 如果它存在而不是数据库,我如何缓存对象并从内存中读取?

c++ - 如何在 C++ 中排序和显示对象列表?

c++ - 如何在图网络中找到闭环

Java For-Each 循环 : Sort order

r - 仅在 R 中的 ANOVA 循环上打印显着结果