操作Dictionary,报“集合已修改;可能无法执行枚举操作。”

headgo 2014-05-11 06:15:07
定义一个简单的Dictionary,遍历修改值时,在foreach中第二次进入时就报错:“集合已修改;可能无法执行枚举操作。”
代码如下:
Dictionary<int, bool> dic = new Dictionary<int, bool>();
for(int i=0;i<10;i++)
{
dic.Add(i, false);
}
foreach (int i in dic.Keys)
{
dic[i] = false;
}

请问这是为何,难道不能更改dic[i]的值吗?如果要改,如何改?
...全文
548 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
bixueqing 2016-04-26
  • 打赏
  • 举报
回复
楼上正解
headgo 2014-05-11
  • 打赏
  • 举报
回复
找到原因了:Dictionary的key和value都是只读的 如果修改便会提示集合已修改,可能无法执行枚举操作。所以一般value如果为类的对象,更改value的成员是没有问题的,但如果为值类型,修改相当于把装箱的对象替换了。 楼上的两位给的代码编译通不过,没有keycollection没有ToArray方法,不过思路是可以的。
zylsky 2014-05-11
  • 打赏
  • 举报
回复
      
 var dic = new Dictionary<int, bool>();
            for (var i = 0; i < 10; i++)
            {
                dic.Add(i, false);
            }
            foreach (var i in dic.Keys.ToArray())
            {
                dic[i] = false;
            }
bwangel 2014-05-11
  • 打赏
  • 举报
回复
foreach (int i in dic.Keys) 改为 foreach (int i in dic.Keys.ToArry()) 这样就不会产生异常了。

110,975

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧