web-dev-qa-db-ja.com

foreachを使用してオブジェクトのリストを反復する

私はこの声明に出くわしました:

"オブジェクトのリストでforeachを使用する場合、繰り返されるオブジェクトインスタンス編集できません編集可能ですが、オブジェクトのプロパティあります編集可能です"

誰かが簡単な例で上記を実証できますか?

言い換えると(2つのバージョンでステートメントを見つけたので)、おそらくこのステートメントはより明確です:

"要素のリストでforeachを使用する場合、要素を提供する反復変数読み取り専用ですが、要素プロパティは編集可能です "

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

つまり、リスト内のアイテムは反復中に変更できませんが、アイテムの内容は変更できます。

これにより、コレクションが変更され、foreachが完了しなくなります。

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

これにより、リスト内のアイテムが変更され、foreachの完了が妨げられることはありません。

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

はい

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

これは失敗します

forループとは異なり、リスト内のアイテムを削除することはできません

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

この例が必要かどうかはわかりません。コレクション内の各オブジェクトをステップオーバーし、それらの各オブジェクトに対して好きなことを行うことができますが、コレクション自体に変更を加えることはできません。挿入、削除、クリアなど。これを実行しようとすると、例外がスローされます。

0
LordWilmore