-3

コレクションのコピーを作成する場合、foreach を使用してループしているコレクションの要素を置き換えることが許可される理由を最もよく説明するにはどうすればよいでしょうか。例:

foreach(Item item in Items)
{
   item.modify //or remove or add
}
// will not work

foreach(Item item in Items.ToList())
{
   item.modify //or remove. or add
}

//will work altough i dont get it because i am now iterating trough the temporary list
//and changing its elements. 
//In my understanding its not like im iterating the list(.ToList) and modifying the source items
//(Items). A graphic representation would be welcome, my interest is to understand the
//matter logically
4

3 に答える 3

0

Enumeratorコレクション内の要素を中継しcount、反復中に変更することは許可されていないためです。

リストのコピーを作成すると(質問に答えて)、変更しているコレクションのコピーを反復処理します。あれは。

于 2012-05-09T06:47:22.210 に答える
-1

あなたのアイテムはどのタイプですか?変更メソッドは何をしますか? 2 番目のオプションでできることを再現できませんでした。これをコンパイルできません:

int[] nn = new int[] { 1, 2 };
foreach (var n in nn.ToList())
   n++;

エラー: 'foreach 反復変数' であるため、'n' に代入できません

于 2012-05-12T02:51:40.193 に答える
-1

最良の答えは、リストにはリスト項目に対して何らかの追跡があり、要求に応じて項目を更新できますが、単純な IEnumerable はそうではないため、それらを変更することはできません。

于 2012-05-11T09:33:10.940 に答える