尝试使用以下内容更新词典时:
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];
}
答案 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;
}