关于C#:使用for循环迭代字典

using a for loop to iterate through a dictionary

我通常使用foreach循环迭代字典。

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

在这种情况下,我希望修剪空白的条目,但是foreach循环不允许这样做。

1
2
3
4
foreach (var kvp in dictSummary)
{
    kvp.Value = kvp.Value.Trim();    
}

如何使用for循环进行此操作?

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


这个怎么样?

1
2
3
4
5
for (int i = dictSummary.Count - 1; i >= 0; i--) {
  var item = dictSummary.ElementAt(i);
  var itemKey = item.Key;
  var itemValue = item.Value;
}


KeyValuePair不允许设置Value,它是不可变的。

你必须这样做:

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

这里的重要部分是ToArray。这将把字典复制到一个数组中,因此更改foreach中的字典不会抛出InvalidOperationException

另一种方法是使用Linq的ToDictionary方法:

1
dictSummary = dictSummary.ToDictionary(x => x.Key, x => x.Value.Trim());


您不需要使用.ToArray().ElementAt()。它与使用键访问字典一样简单:

1
dictSummary.Keys.ToList().ForEach(k => dictSummary[k] = dictSummary[k].Trim());