社区
C#
帖子详情
异常:集合已改变,可能导致无法进行枚举操作?
tjyyyatjp5305231
2008-05-23 04:16:10
dictionray<string,string> dic=new dictionray<string,string>();
修改某个键的值同时,我用foreach(string s in dic.keys) 循环操作 ,程序报出如题式的异常。请问该如何处理啊?
...全文
485
9
打赏
收藏
异常:集合已改变,可能导致无法进行枚举操作?
dictionray dic=new dictionray(); 修改某个键的值同时,我用foreach(string s in dic.keys) 循环操作 ,程序报出如题式的异常。请问该如何处理啊?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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))
JavaSE基础视频精讲⑬:
异常
处理和
枚举
本课程适用于零基础小白快速入门Java语言技术,通过课程学习可以清晰了解Java
异常
处理和
枚举
。课程配套完整的(笔记+代码+作业)
C#使用List出现“
集合
已修改;
可能
无法
执行
枚举
操作
”错误的解决办法
C#使用List出现“
集合
已修改;
可能
无法
执行
枚举
操作
”错误的解决办法 原因: 在循环的时候,当
集合
被删除了一个item后,那么总数 count和索引就会发生
改变
.所以会报错 解决方法: 不要在List上执行
枚举
集合
的
操作
(例如foreach)中去执行修改
集合
的
操作
。如果需要修改
集合
,先使用 ToArray() 方法转化成Array,例如 foreach (string s in rs.ToArr...
C#
异常
:“
集合
已被修改,
可能
无法
操作
枚举
类型”
简单的讲就是:被遍历的
集合
在遍历过程中,被其他线程或者地方
改变
java8 foreach 抛
异常
_foreach
集合
又抛经典
异常
了,这次一定要刨根问底
一:背景1. 讲故事最近同事在写一段业务逻辑的时候,程序跑起来总是报:
集合
已修改;
可能
无法
执行
枚举
操作
,硬是没有找到什么情况下会
导致
这个
异常
产生,就让我来找一下bug,其实这个
异常
在座的每个程序员几乎都遇到过,谁也不是一生下就是大牛,简单看了下代码,确实是多线程
操作
foreach,但并没有对foreach
进行
Add,Remove
操作
,扫完代码其实我也是有点懵,没撤只能调试了,在foreach里套一...
Java
集合
、泛型和
枚举
转载于:http://c.biancheng.net/java/ 在 Java 中数组的长度是不可修改的。然而在实际应用的很多情况下,
无法
确定数据数量。这些数据不适合使用数组来保存,这时候就需要使用
集合
。 Java 的
集合
就像一个容器,用来存储 Java 类的对象。有些容器内部存放的东西在容器内部是不可
操作
的,像水瓶里的水,除了将其装入和倒出之外,就不能再
进行
别的
操作
了,但是很容易装入和倒出;而有些容器内部存放的东西在容器内部是可以
操作
的,例如,衣柜里面摆放的衣服,不仅可以将衣服存放到衣柜中,还可以将衣服有
C#
110,536
社区成员
642,576
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章