我发现了这句话:
"在对象列表中使用foreach时,迭代对象实例不可可编辑,但对象属性 可编辑"
有人可以通过一个简单的例子演示上述内容吗?
让我重新说一句(因为我发现两个版本的声明),也许这句话更清楚:
"在元素列表中使用foreach时,提供元素的迭代变量是 readonly ,但是元素属性可编辑"
答案 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)
不确定你需要一个例子。您将跨越集合中的每个对象,并且可以对每个对象执行您喜欢的操作,但是您无法对集合本身进行更改,例如,插入,删除,清除等。尝试这样做会引发异常。