列挙操作は実行されない可能性? – プログラミング – Home

列挙操作は実行されない可能性?
 
通知
すべてクリア

[解決済] 列挙操作は実行されない可能性?


toru
 toru
(@toru)
ゲスト
結合: 23年前
投稿: 37
Topic starter  

下記のコードで、Dictionaryの全ての値を更新する処理を書きました。
すると、
「コレクションが変更されました。列挙操作は実行されない可能性があります。」
というエラーが発生しました。

このような処理は行ってはいけないのでしょうか。
コレクションをまわしながら、更新してはいけない?

Dictionary<string, string> map = new Dictionary<string, string>();
map.Add(1, aa);
map.Add(2, bb);
map.Add(3, cc);

Dictionary<string,string>.KeyCollection key = map.Keys;
foreach (string str in key)
{
map[str] = aa;
}


引用未解決
トピックタグ
YuO
 YuO
(@YuO)
ゲスト
結合: 22年前
投稿: 320
 

foreach中でコレクションを変更してはいけません。
というか,コレクションを変更した場合,IEnumerator.MoveNextが
InvalidOperationExceptionを送出します。

http://msdn2.microsoft.com/ja-jp/library/ttw7t8t6.aspx
> foreach ステートメントは、コレクションを繰り返し処理して目的の情報を取得するの
に使用しますが、予期しない動作を防ぐため、コレクション内容の変更には使用しないで
ください。
http://msdn2.microsoft.com/ja-jp/library/
system.collections.ienumerator.movenext.aspx
> 要素の追加、変更、削除などの変更がコレクションに対して実行されると、列挙子は回
復不可能な無効状態になり、次に MoveNext または Reset を呼び出すと
InvalidOperationException がスローされます。


返信引用
toru
 toru
(@toru)
ゲスト
結合: 23年前
投稿: 37
Topic starter  

foreach中は、コレクションを変更してはいけなかったんですね。知らなかった。
参照先、ご紹介ありがとうございます。

IList<string> list = new List<string>(map.Keys);
foreach (string str in list)
{
map[str] = aa;
}

Keysから新しいリストを作成してぐるぐるまわすことにしました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました