日期:2014-05-18  浏览次数:20769 次

C# 使用Dictionary<TKey,TValue> 遇到的问题?
我的这个集合中有关于很多用户的信息,每个人都可能正在更改自己的信息.
为了提高效率,我将集合对象改成Dictionary<TKey,TVale>.

我以为Dictionary<Tkey,TValue>是线程安全的,所以多人操作就没做过多考虑.

结果我发现,一旦有人改动后就无法遍历了.. 报的错为:"集合已修改;可能无法执行枚举操作"

如何解决这个问题?


我在使用线程安全的hashtable时没有遇到这样的问题..

------解决方案--------------------
我遇到同样的问题。我的方法是用一个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]);
}