我的这个集合中有关于很多用户的信息,每个人都可能正在更改自己的信息.
为了提高效率,我将集合对象改成Dictionary<TKey,TVale>.我以为Dictionary<Tkey,TValue>是线程安全的,所以多人操作就没做过多考虑.结果我发现,一旦有人改动后就无法遍历了..  报的错为:"集合已修改;可能无法执行枚举操作"如何解决这个问题?
我在使用线程安全的hashtable时没有遇到这样的问题..

解决方案 »

  1.   

    foreach在遍历时是不允许修改的,可以改为For
      

  2.   

    加lock
    还有更新操作的时候不能用foreach遍历
      

  3.   

    我遇到同样的问题。我的方法是用一个List记下要删除的Key,然后循环List来删除Dictionary里的值:
                List<string> lstCompleted = new List<string>(); 
                foreach (KeyValuePair<string, RemoteTaskItem> kvp in queue)
                {
                    if (kvp.Value.Status == 3) //要删除的记录
                    {
                        lstCompleted.Add(kvp.Key); 
                    }
                }            for (int i = 0; i < lstCompleted.Count; i++)
                {
                    queue.Remove(lstCompleted[i]);
                }