4

次のようにディクショナリを更新しようとすると:

foreach(KeyValuePair<string, string> pair in dict)
{
dict[pair.Key] = "Hello";
}

そして、例外がスローされます。キーまたは値のバックアップを作成せずに辞書を動的に更新する方法はありますか?

編集!!!!!!コードを表示します。この部分は実際に実行可能であることに気付きました。実際のケースはこれです。私はそれらが同じだと思っていましたが、そうではありません。

foreach(KeyValuePair<string, string> pair in dict)
    {
    dict[pair.Key] = pair.Key + dict[pair.Key];
    }
4

2 に答える 2

2

辞書をループすることもできます(ToListforeach ループでループされているコレクションを変更できないため、使用する必要があります)

foreach(var key in dict.Keys.ToList())
{
    dict[key] = "Hello";
}

または、すべてのキーに同じ値を設定しているので、LINQ の 1 行で実行できます。

dict = dict.ToDictionary(x => x.Key, x => "Hello");

更新された質問

foreach (var key in dict.Keys.ToList())
{
    dict[key] = key + dict[key];
}

およびLINQバージョン

dict = dict.ToDictionary(x => x.Key, x =>  x.Key + x.Value);

の使用を避けたい場合は、コレクションを直接変更できるように をToList使用できます。ElementAt

for (int i = 0; i < dict.Count; i++) 
{
   var item = dict.ElementAt(i);
   dict[item.Key] = item.Key + item.Value;
}
于 2013-06-28T19:50:38.817 に答える