在对哈希表或arraylist使用foreach进行遍历时,对某一项的值进行修改,不是添加或删除,并且对哈希表或arraylist进行操作时都对syncRoot进行了lock,这种操作是安全的,希望大虾赐教。

解决方案 »

  1.   

    foreach 中枚举出来的项是只读的。
      

  2.   

    但对其枚举的项进行了修改没有报错,还有对哈希表和多arraylist的操作是一样的吗
      

  3.   

    foreach只用于只读操作
    Hashtable ht=new Hashtable(); file创建一个Hashtable实例
    ht.Add(1,a);
    ht.Add(2,c);
    ht.Add(3,b);ht.Remove(3);
    ht.Clear();
    for(DictionaryEntry de in ht) 
     {
       Console.WriteLine(de.Key);d
       Console.WriteLine(de.Value);
     }ArrayList list = new ArrayList();
    lock( list.SyncRoot ) //当ArrayList为非线程包装的时候,SyncRoot属性其实就是它自己,使用SyncRoot来保持源代码的规范性
    {
    list.Add("");
    }
    遍历操作
      

  4.   

    foreach枚举是只读的,但是对于类,可以改变成员的值。