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

标签 c# foreach enumeration

我不知道为什么这可行:

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/

相关文章:

c# - 在 C# 中从 FLV 流中提取音频

c# - 计算谁先冲过终点线 (C# UNITY)

arrays - 加载字段 1 并在 Perl 中的 END{} 等效 awk 处打印

c# - 在 Excel 范围内指定列

java - 我想使用增强的 for 循环,从用户那里获取输入并找到数组中的元素,为什么这个程序没有相应地运行?

java - 使用 Scala foreach 处理 CQEngine ResultSet 非常慢

c# - 如何使用 C# DirectoryInfo 枚举所有子目录的文件?

ruby - 你如何创建一个可枚举对象来根据需要从另一个可枚举对象中求值?

c# - 只有字符串值的公共(public)枚举

c# - 如何通过 XAML 为 Enum 类型的子项设置 MenuItem 的 IsChecked 属性?