我目前在班上有一个静态字典.虽然我已经在这个字典上实现了锁,但是我收到了以下错误.
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界面中定义并explicitly在Dictionary类中实现.因此,为了访问它,您需要将实例强制转换为ICollection.
((ICollection)dict_object).SyncRoot
Run Code Online (Sandbox Code Playgroud)