静态字典需要线程安全 - 建议?

Raj*_*war 0 c#

我目前在班上有一个静态字典.虽然我已经在这个字典上实现了锁,但是我收到了以下错误.

An InvalidOperationException has occurred. It reports a "collection was modified" error 
Run Code Online (Sandbox Code Playgroud)

这样做的原因是,有时一种方法是使用foreach读取字典,而另一种方法正在删除或添加项目.我读到了添加

lock ( (  (IDictionary<string,string>)dict_object).SyncRoot )
Run Code Online (Sandbox Code Playgroud)

在所有进行读/写/删除操作的操作将解决问题,但我继续收到消息

does not contain a definition of SyncRoot are you missing a using directive
Run Code Online (Sandbox Code Playgroud)

关于如何解决这个问题的任何建议?关于如何使我的静态字典线程安全的任何其他方式?我使用的是.Net 4.0

IAm*_*ser 10

简单:使用ConcurrentDictionary类而不是a Dictionary.它是.NET 4.0中提供的线程安全字典实现.

http://msdn.microsoft.com/en-us/library/dd287191(v=vs.100).aspx

您的错误的原因SyncRoot是在ICollection界面中定义并explicitlyDictionary类中实现.因此,为了访问它,您需要将实例强制转换为ICollection.

((ICollection)dict_object).SyncRoot
Run Code Online (Sandbox Code Playgroud)