如何更改字典<字符串,布尔>中的所有值?



所以我有一个Dictionary<string, bool>,我只想对它进行迭代,并将字典中的所有值设置为false。最简单的方法是什么?

我试过这个:

foreach (string key in parameterDictionary.Keys)
    parameterDictionary[key] = false;

然而,我得到了错误:"集合已被修改;枚举操作可能无法执行。"

有更好的方法吗?

只需将枚举源更改为字典以外的内容。

foreach (string key in parameterDictionary.Keys.ToList())
  parameterDictionary[key] = false;

对于.net 2.0

foreach (string key in new List<TKey>(parameterDictionary.Keys))
  parameterDictionary[key] = false;

在.net 5中,以下代码段不再抛出:

var d = new Dictionary<string, int> { { "a", 0 }, { "b", 0 }, { "c", 0 }};
foreach (var k in d.Keys){
      d[k] = 1;
}

有时在使用foreach.ForEach循环时会遇到这种情况。使用for循环可以使用字典自己的密钥集合:

    for(int i = 0; i < parameterDictionary.Count; ++i) {
        var kvp = parameterDictionary.ElementAt(i); // using System.Linq;
        parameterDictionary[kvp.Key] = false;
    }

**编辑**

人们似乎对我的答案感到不安,尽管我不知道该怎么办,所以我写了一把小提琴来支持我的代码:

https://dotnetfiddle.net/U9EsNO

票据

  • 尝试在foreach中编辑字典自己的值将导致InvalidOperationException
  • 你看,我用for循环来克服这个错误
  • 将密钥集合复制到另一个变量总是完全可以接受的

**编辑2*

感谢@DStanley,我对反对票有了更多的了解,并对我的回答进行了适当的编辑。编码快乐!

相关内容

  • 没有找到相关文章

最新更新