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

4

你有什么理由不迭代键?

foreach(var key in dict.Keys)
{
    dict[key] = "Hello";
}
于 2013-06-28T19:43:22.620 回答
2

您可以遍历字典(您需要使用ToList,因为您无法更改在 foreach 循环中循环的集合)

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

或者您可以在为所有键设置相同值时在一行 LINQ 中执行此操作。

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