我不知道为什么这可行:
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()
不是强制转换操作,所以它会复制原始列表。
因此,您要遍历副本并修改原始副本。
关于c# - 从枚举集合中删除foreach循环项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23728954/