40

通常、辞書を反復処理するために foreach ループを使用します。

Dictionary<string, string> dictSummary = new Dictionary<string, string>();

この場合、空白のエントリを削除したいのですが、foreach ループではこれができません。

foreach (var kvp in dictSummary)
{
    kvp.Value = kvp.Value.Trim();    
}

forループでこれを行うにはどうすればよいですか?

for (int i = dictSummary.Count - 1; i >= 0; i--)
{
}
4

3 に答える 3

56

これはどうですか?

for (int i = dictSummary.Count - 1; i >= 0; i--) {
  var item = dictSummary.ElementAt(i);
  var itemKey = item.Key;
  var itemValue = item.Value;
}
于 2013-03-06T07:27:51.263 に答える
29

KeyValuePair<TKey, TValue>を設定することはできませんValue。不変です。

次のようにする必要があります。

foreach(var kvp in dictSummary.ToArray())
    dictSummary[kvp.Key] = kvp.Value.Trim();

ここで重要な部分はToArray. これにより Dictionary が配列にコピーされるため、 foreach 内で辞書を変更してもInvalidOperationException.

別のアプローチでは、LINQ のToDictionary方法を使用します。

dictSummary = dictSummary.ToDictionary(x => x.Key, x => x.Value.Trim());
于 2013-03-06T07:21:04.203 に答える