首页 新闻 赞助 找找看

集合已修改;可能无法执行枚举操作。

0
[已关闭问题] 关闭于 2011-03-07 16:43

Hashtable遍历的时候不能对他修改,于是我先复制,但是复制的时候对他修改也会有这个错误,要lock吗,可是lock里面的运行效率比较差,求解。补充:在多线程里面

拖鞋王子的主页 拖鞋王子 | 初学一级 | 园豆:37
提问于:2010-11-01 21:47
< >
分享
所有回答(3)
0

Hashtable在foreach遍历的时候是不能修改的,需要修改可以用for语句,或者先记录要修改的,等foreach完了再修改。如下代码 : 

Hashtable ht = new Hashtable();
            ht.Add(0,"1");
            ht.Add(1, "2");
            List<int> keys = new List<int>();
            foreach (DictionaryEntry item in ht)
            {
                if (item.Value.ToString() == "1")
                {
                    keys.Add(int.Parse(item.Key.ToString()));
                }
            }
            foreach (int item in keys)
            {
                ht[item] = "33";
            }
            MessageBox.Show(ht[keys[0]].ToString());

大狼熙熙 | 园豆:129 (初学一级) | 2010-11-01 22:26
遍历Hashtable好想不能用for
支持(0) 反对(0) 拖鞋王子 | 园豆:37 (初学一级) | 2010-11-01 22:27
0

你是想在foreach中作Remove add的功能,这个是不行的,不但HashTable不行,凡是集合,用了foreach都不行。但是修改value中的值是可以的。

沉默的糕点 | 园豆:1786 (小虾三级) | 2010-11-02 09:08
不是在foreach中去改变他,而是多线程的,这边遍历那边在修改
支持(0) 反对(0) 拖鞋王子 | 园豆:37 (初学一级) | 2010-11-02 10:39
@拖鞋王子:Hashtable提供一个线程安全的方法, Synchronized 返回 Hashtable 的同步(线程安全)包装。
支持(0) 反对(0) 大狼熙熙 | 园豆:129 (初学一级) | 2010-11-02 17:51
0

只要用了foreach,就不能在foreach中进行对象的修改,否则循环不能执行下去。

角逐魏蜀吴 | 园豆:533 (小虾三级) | 2010-11-16 12:35
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册