使用foreach迭代对象列表

时间:2016-06-29 12:19:07

标签: c# generic-list

我发现了这句话:

  

"在对象列表中使用foreach时,迭代对象实例不可可编辑,但对象属性 可编辑"

有人可以通过一个简单的例子演示上述内容吗?

让我重新说一句(因为我发现两个版本的声明),也许这句话更清楚:

  

"在元素列表中使用foreach时,提供元素的迭代变量 readonly ,但是元素属性可编辑"

5 个答案:

答案 0 :(得分:9)

foreach(var foo in foos)
{
  foo = null; // WRONG, foo is not editable
  foo.name = "John";  // RIGHT, foo properties are editable
}

答案 1 :(得分:1)

这意味着列表中的项目在迭代时不会发生变化,但项目的内容可能会发生变化。

这将改变收集并阻止foreach完成:

foreach(var item in collection)
{
   collection.Remove(item);
}

这将更改列表中的项目,而不会阻止foreach完成:

foreach(var item in collection)
{
    item.name = "Neil";
}

答案 2 :(得分:0)

Foreach (n in list) if (n.something==true) list.Remove(n);

这将失败

你不能删除列表中的项目,不像说for for循环

答案 3 :(得分:0)

foreach var car in cars 
{
    //you can edit car.color here
    //you cannot edit car
}

答案 4 :(得分:0)

不确定你需要一个例子。您将跨越集合中的每个对象,并且可以对每个对象执行您喜欢的操作,但是您无法对集合本身进行更改,例如,插入,删除,清除等。尝试这样做会引发异常。