Skip to main content
 首页 » 编程设计

c#之从枚举集合中删除foreach循环项

2024年01月22日29lvdongjie

我不知道为什么这可行:

var list = new List<int>() { 1, 4, 3, 2, 0, 1 }; 
 
foreach (var item in list.ToList()) 
{ 
    if (item == 1) 
    { 
        list.Remove(item); 
    } 
} 


...而这不是:

var list = new List<int>() { 1, 4, 3, 2, 0, 1 }; 
 
foreach (var item in list) 
{ 
    if (item == 1) 
    { 
        list.Remove(item); 
    } 
} 


如果您运行第二个代码段,则会出现以下错误:

Collection was modified; enumeration operation may not execute. 


根据文档,枚举仅在保持不变的情况下才保持有效。我没有得到的是如何在第一个代码段中解决它?有人可以为我分解吗?

请您参考如下方法:

因为.ToList()不是强制转换操作,所以它会复制原始列表。

因此,您要遍历副本并修改原始副本。