为了账号安全,请及时绑定邮箱和手机立即绑定

如何在遍历泛型列表时从泛型列表中删除元素?

如何在遍历泛型列表时从泛型列表中删除元素?

C#
holdtom 2019-06-13 17:29:22
如何在遍历泛型列表时从泛型列表中删除元素?我在找一个更好的花纹为了处理每个需要处理的元素列表,然后根据结果从列表中删除。你不能用.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.有什么好办法吗?
查看完整描述

3 回答

?
慕虎7371278

TA贡献1802条经验 获得超4个赞

用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方法带有要对以下内容进行测试的谓词:

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));


查看完整回答
反对 回复 2019-06-13
?
浮云间

TA贡献1829条经验 获得超4个赞

一个简单明了的解决方案:

使用标准的循环运行。倒着在你的收藏品上RemoveAt(i)删除元素。


查看完整回答
反对 回复 2019-06-13
?
慕斯王

TA贡献1864条经验 获得超2个赞

当您想要在对集合进行迭代时从集合中删除元素时,首先要想到的是反向迭代。

幸运的是,有一个比编写一个for循环更优雅的解决方案,它涉及不必要的输入,并且可能容易出错。

ICollection<int> test = new List<int>(new int[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10});foreach (int myInt in test.Reverse<int>()){
    if (myInt % 2 == 0)
    {
        test.Remove(myInt);
    }}


查看完整回答
反对 回复 2019-06-13
  • 3 回答
  • 0 关注
  • 719 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信