异常:集合已改变,可能导致无法进行枚举操作?

tjyyyatjp5305231 2008-05-23 04:16:10
dictionray<string,string> dic=new dictionray<string,string>();
修改某个键的值同时,我用foreach(string s in dic.keys) 循环操作 ,程序报出如题式的异常。请问该如何处理啊?
...全文
485 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
niulei 2011-10-14
  • 打赏
  • 举报
回复
总结一下
方法1:
把foreach(string s in dic.keys)
改成foreach(string s in new List <string>(dic.keys))
方法2:
dictionray <string,string> dic=new dictionray <string,string>();
for(int i = 0;i < dic.keys.Count;i++)
{
//逻辑代码
}

个人觉得还是第一种方法靠谱,更好一些!但是new了一个新的,占用资源,第二种方法,可能效率上差一些
marvelstack 2008-05-23
  • 打赏
  • 举报
回复
dictionray <string,string> dic=new dictionray <string,string>();
for(int i = 0;i < dic.keys.Count;i++)
{
//逻辑代码
}
tjyyyatjp5305231 2008-05-23
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 viewsonic2235 的回复:]
依据?就是重新构建了一个string的List,里面存的是那些key。遍历的时候就会从这个List里面去取这些key的值,而不是从dic.Keys里面取,这样就躲过了遍历Keys的过程中对Dictionary对是否进行了修改的判断,所以就不会抛异常了
[/Quote]
哦,单元你的是正确的,呵呵
viewsonic2235 2008-05-23
  • 打赏
  • 举报
回复
依据?就是重新构建了一个string的List,里面存的是那些key。遍历的时候就会从这个List里面去取这些key的值,而不是从dic.Keys里面取,这样就躲过了遍历Keys的过程中对Dictionary对是否进行了修改的判断,所以就不会抛异常了
jinjazz 2008-05-23
  • 打赏
  • 举报
回复
不要再foreach里面改变List的元素,比如add和remove
tjyyyatjp5305231 2008-05-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 viewsonic2235 的回复:]
把foreach(string s in dic.keys)
改成foreach(string s in new List <string>(dic.keys))
[/Quote]
你的依据是什么啊?
tianrui456 2008-05-23
  • 打赏
  • 举报
回复
在foreach 中记录下符合更改条件的 index 出foreach 在对每个index进行操作
注意 要执行remove操作的时候要从大index到小index执行
fuda_1985 2008-05-23
  • 打赏
  • 举报
回复
沙发了!~
viewsonic2235 2008-05-23
  • 打赏
  • 举报
回复
把foreach(string s in dic.keys)
改成foreach(string s in new List<string>(dic.keys))

110,536

社区成员

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

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

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