有什么方法可以在迭代过程中编辑一个字典的值吗?

问题描述 投票:0回答:1

我想改变C#字典中所有满足某个标准的值。

简单的编辑值是这样的

foreach (var kv in dictionary)
{
   kv.Value += 1;
}

不起作用,因为 KeyValuePairforeach 循环是只读的。

然而,像这样直接编辑条目。

foreach (var kv in dictionary)
{
   dictionary[kv.Key] = kv.Value + 1;
}

也是行不通的,因为它会修改集合并破坏迭代器。

在这一点上,我能想到的唯一剩下的解决方案是将字典的所有键存储在一个列表中,然后在第二个循环中使用它来编辑值,然而,在我看来,这似乎是一个非常不优雅的解决方案。

有什么更好的选择吗?

c# linq dictionary foreach iterator
1个回答
4
投票

你可以创建一个数组(或者一个列表与 .ToList())从 .Keysforeach诸如此类的东西。

foreach (string key in dictionary.Keys.ToArray())
{
    dictionary[key] += 1;
}

3
投票

你可以用 ToDictionary 创立新 Dictionary 并改变循环中的原点,如 。

foreach (var kv in dictionary.ToDictionary(k=>k.Key,v=>v.Value))
{
   dictionary[kv.Key] = kv.Value + 1;
}

希望对你有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.