从枚举集合中删除每个循环项
本文关键字:循环 删除 枚举 集合 | 更新日期: 2023-09-27 18:04:02
我不知道为什么会这样:
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()
不是强制转换操作,因此它对原始列表进行复制。
那么你就可以在副本上迭代并修改原始
因为在第一个代码片段中,您不是遍历列表,而是遍历列表的副本。
因此,从原始列表中删除一个项不会引起任何异常,因为它与被枚举的集合不同。