Hashtable遍历的时候不能对他修改,于是我先复制,但是复制的时候对他修改也会有这个错误,要lock吗,可是lock里面的运行效率比较差,求解。补充:在多线程里面
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());
你是想在foreach中作Remove add的功能,这个是不行的,不但HashTable不行,凡是集合,用了foreach都不行。但是修改value中的值是可以的。
只要用了foreach,就不能在foreach中进行对象的修改,否则循环不能执行下去。