如何更改Dictionary <string,bool>中的所有值?

Che*_*hev 6 c# linq dictionary loops enumeration

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

我试过这个:

foreach (string key in parameterDictionary.Keys)
    parameterDictionary[key] = false;
Run Code Online (Sandbox Code Playgroud)

但是我收到错误:"收集已被修改;枚举操作可能无法执行."

有一个更好的方法吗?

Amy*_*y B 17

只需将枚举源更改为字典以外的其他内容即可.

foreach (string key in parameterDictionary.Keys.ToList())
  parameterDictionary[key] = false;
Run Code Online (Sandbox Code Playgroud)

对于.net 2.0

foreach (string key in new List<TKey>(parameterDictionary.Keys))
  parameterDictionary[key] = false;
Run Code Online (Sandbox Code Playgroud)


tym*_*tam 5

在 .NET 5 中,以下代码片段不再抛出异常:

var d = new Dictionary<string, int> { { "a", 0 }, { "b", 0 }, { "c", 0 }};

foreach (var k in d.Keys){
    d[k] = 1;
}
Run Code Online (Sandbox Code Playgroud)