私はこの声明に出くわしました:
"オブジェクトのリストでforeachを使用する場合、繰り返されるオブジェクトインスタンス編集できません編集可能ですが、オブジェクトのプロパティあります編集可能です"
誰かが簡単な例で上記を実証できますか?
言い換えると(2つのバージョンでステートメントを見つけたので)、おそらくこのステートメントはより明確です:
"要素のリストで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);
これは失敗します
forループとは異なり、リスト内のアイテムを削除することはできません
foreach var car in cars
{
//you can edit car.color here
//you cannot edit car
}
この例が必要かどうかはわかりません。コレクション内の各オブジェクトをステップオーバーし、それらの各オブジェクトに対して好きなことを行うことができますが、コレクション自体に変更を加えることはできません。挿入、削除、クリアなど。これを実行しようとすると、例外がスローされます。