如果你复制它,为什么能最好地解释为什么要使用foreach替换正在循环的集合的元素。示例:
foreach(Item item in Items)
{
item.modify //or remove or add
}
// will not work
foreach(Item item in Items.ToList())
{
item.modify //or remove. or add
}
//will work altough i dont get it because i am now iterating trough the temporary list
//and changing its elements.
//In my understanding its not like im iterating the list(.ToList) and modifying the source items
//(Items). A graphic representation would be welcome, my interest is to understand the
//matter logically
答案 0 :(得分:0)
因为Enumerator
会转发集合中count
个元素,并且在迭代过程中您不会更改它。
如果您复制了列表(回答您的问题),则会迭代您正在更改的集合的副本。就是这样。
答案 1 :(得分:-1)
最佳答案是List会对其列表项进行某种跟踪,并且可以按照您的要求更新其项目,但是简单的IEnumerable不会这样,因此它不允许您更改它们。
答案 2 :(得分:-1)
您的商品是什么类型的?修改方法有什么作用?我无法重现你可以用第二个选项做什么。我无法编译:
int[] nn = new int[] { 1, 2 };
foreach (var n in nn.ToList())
n++;
错误:无法分配给'n',因为它是'foreach迭代变量'