-3

如果您制作一个副本,您如何最好地解释为什么允许使用 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
4

3 回答 3

0

因为Enumerator中继count集合中的元素,并且您不会在迭代期间更改它。

如果您制作列表的副本(响应您的问题),您将迭代您正在更改的集合的副本。那是。

于 2012-05-09T06:47:22.210 回答
-1

最好的答案是 List 对其列表项具有某种跟踪,并且可以根据您的要求更新其项目,但简单的 IEnumerable 没有,因此它不允许您更改它们。

于 2012-05-11T09:33:10.940 回答
-1

您的商品是什么类型的?修改方法有什么作用?我无法重现您可以使用第二个选项执行的操作。我无法编译这个:

int[] nn = new int[] { 1, 2 };
foreach (var n in nn.ToList())
   n++;

错误:无法分配给“n”,因为它是“foreach 迭代变量”

于 2012-05-12T02:51:40.193 回答