使用foreach迭代对象列表

本文关键字:列表 对象 迭代 foreach 使用 | 更新日期: 2023-09-27 17:53:13

我看到了这句话:

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

谁能举个简单的例子说明一下?

让我重新表述一下(因为我发现这句话有两个版本),也许这句话更清楚:

"当对元素列表使用foreach时,提供元素的迭代变量只读的,但是元素属性是可编辑的"

使用foreach迭代对象列表

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

这意味着列表中的项在迭代时不能改变,但项的内容可以改变。

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

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

这将改变列表中的一个项目,而不阻止foreach完成:

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

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

这将失败

不能删除list中的项,不像for循环

不确定是否需要一个示例。你可以遍历集合中的每个对象,你可以对每个对象做你喜欢的事情,但是你不能对集合本身进行更改,例如插入、删除、清除等。

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