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

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

所以我有一个

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

我试过这个:

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

但是我收到错误:“集合已修改;枚举操作可能无法执行。”

有更好的方法吗?

c# linq loops dictionary enumeration
3个回答
22
投票

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

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;

2
投票

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

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

foreach (var k in d.Keys){
      d[k] = 1;
}

-1
投票

有时您在使用

foreach
.ForEach
循环时会遇到这个问题。使用 for 循环允许您使用字典自己的键集合:

    var keys = this.parameterDictionary.Keys.ToList();
    for(int i = 0; i < keys.Count; ++i) {
        this.parameterDictionary[keys[i]] = false;
    }
© www.soinside.com 2019 - 2024. All rights reserved.