使用 foreach 迭代对象列表
Iterating a list of objects with foreach
我看到了这个说法:
"When using foreach on a list of objects, the iterated object instance is not editable, but the object properties are editable"
有人可以用一个简单的例子来演示上面的内容吗?
我重新表述一下(因为我找到了两个版本的说法),也许这个说法更清楚:
"When using foreach on a list of elements, the iteration variable that provides the element is readonly, but the element properties are editable"
是
Foreach (n in list) if (n.something==true) list.Remove(n);
这会失败
你不能删除列表中的项目,不像 for 循环
foreach(var foo in foos)
{
foo = null; // WRONG, foo is not editable
foo.name = "John"; // RIGHT, foo properties are editable
}
foreach var car in cars
{
//you can edit car.color here
//you cannot edit car
}
意思是迭代时列表中的项目不能改变,但项目的内容可以。
这将改变集合并阻止 foreach 完成:
foreach(var item in collection)
{
collection.Remove(item);
}
这将更改列表中的项目,并且不会阻止 foreach 完成:
foreach(var item in collection)
{
item.name = "Neil";
}
不确定是否需要示例。您将跨过集合中的每个对象,您可以对每个对象执行您喜欢的操作,但不能对集合本身进行更改,例如插入、删除、清除等。尝试这样做会引发异常。
我看到了这个说法:
"When using foreach on a list of objects, the iterated object instance is not editable, but the object properties are editable"
有人可以用一个简单的例子来演示上面的内容吗?
我重新表述一下(因为我找到了两个版本的说法),也许这个说法更清楚:
"When using foreach on a list of elements, the iteration variable that provides the element is readonly, but the element properties are editable"
是
Foreach (n in list) if (n.something==true) list.Remove(n);
这会失败
你不能删除列表中的项目,不像 for 循环
foreach(var foo in foos)
{
foo = null; // WRONG, foo is not editable
foo.name = "John"; // RIGHT, foo properties are editable
}
foreach var car in cars
{
//you can edit car.color here
//you cannot edit car
}
意思是迭代时列表中的项目不能改变,但项目的内容可以。
这将改变集合并阻止 foreach 完成:
foreach(var item in collection)
{
collection.Remove(item);
}
这将更改列表中的项目,并且不会阻止 foreach 完成:
foreach(var item in collection)
{
item.name = "Neil";
}
不确定是否需要示例。您将跨过集合中的每个对象,您可以对每个对象执行您喜欢的操作,但不能对集合本身进行更改,例如插入、删除、清除等。尝试这样做会引发异常。