加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 如何在迭代字典项时更新值?

发布时间:2020-12-15 21:01:06 所属栏目:asp.Net 来源:网络整理
导读:我有一本字典: Dictionarystring,long Reps = new Dictionarystring,long(); 我想在迭代所有项目时更新值,如下所示: foreach (string key in Reps.keys){ Reps[key] = 0;} 它给我一个错误说: "Collection was modified; enumeration operation may not ex
我有一本字典:
Dictionary<string,long> Reps = new Dictionary<string,long>();

我想在迭代所有项目时更新值,如下所示:

foreach (string key in Reps.keys)
{
    Reps[key] = 0;
}

它给我一个错误说:

"Collection was modified; enumeration operation may not execute"

任何人都可以告诉我为什么它给我这个错误,因为我还有一个函数添加了值,并在单击按钮时调用它:

public static void Increment(string RepId,int amount)
{
     long _value = Convert.ToInt64(Reps[RepId]);
     _value = _value + amount;
     Reps[RepId] = _value;
}

这个功能工作正常.那么更新所有值时会出现什么问题?最新解决方案是什么?

解决方法

更简化,这样做:
foreach (string key in Reps.keys.ToList())
{
    Reps[key] = 0;
}

并且出错的原因是您正在尝试编辑正在使用的实际对象,如果您复制它,然后像这样使用它:

var repscopy = Reps;
foreach (string key in repscopy.keys)
    {
        Reps[key] = 0;
    }

它会给出与指向原始对象相同的错误,并且当添加ToList()时,它会创建一个新的List对象

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读