gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 03:27:39 25 4
gpt4 key购买 nike

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

您不能使用 .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/1582285/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com