40

我通常使用 foreach 循环来遍历 Dictionary。

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 回答
7

你不需要使用.ToArray()or .ElementAt()。就像使用键访问字典一样简单:

dictSummary.Keys.ToList().ForEach(k => dictSummary[k] = dictSummary[k].Trim());
于 2015-10-27T15:05:17.323 回答