使用foreach动态更新字典

时间:2013-06-28 19:41:32

标签: c# dictionary

尝试使用以下内容更新词典时:

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

抛出异常。有没有办法动态更新字典而不进行任何类型的键或值备份?

EDIT !!!!!!查看代码。我意识到这部分实际上是可行的。真实的情况是这样的。我以为他们会一样,但他们不是。

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

2 个答案:

答案 0 :(得分:4)

为什么你没有迭代密钥?

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

答案 1 :(得分: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;
}