Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 你能锁定通用词典吗?_C#_Multithreading_Generics_Dictionary_Locking - Fatal编程技术网

C# 你能锁定通用词典吗?

C# 你能锁定通用词典吗?,c#,multithreading,generics,dictionary,locking,C#,Multithreading,Generics,Dictionary,Locking,或者您应该始终创建其他锁定对象吗?是的,将其强制转换为IDictionary并锁定到。SyncRoot: Generic.Dictionary<int, int> dic = new Generic.Dictionary<int, int>(); lock (((IDictionary)dic).SyncRoot) { // code } Generic.Dictionary dic=新建Generic.Dictionary(); 锁(((IDictionar

或者您应该始终创建其他锁定对象吗?

是的,将其强制转换为IDictionary并锁定到
。SyncRoot

Generic.Dictionary<int, int> dic = new Generic.Dictionary<int, int>();

lock (((IDictionary)dic).SyncRoot)
{
    // code
}
Generic.Dictionary dic=新建Generic.Dictionary();
锁(((IDictionary)dic.SyncRoot)
{
//代码
}
谢谢你提供的信息


当然,正如其他人所建议的那样,线程安全字典也不错。

您可以锁定任何您想要的对象(值类型除外)。建议锁定.SyncRoot对象。

此答案已被接受,但阅读此内容的任何人也应查看此内容,例如:。SyncRoot不是锁定集合的最佳方法。我意识到这个答案已经过时了。我只是想告诉你链接现在已经死了。最好不要使用“SyncRoot”,这是.net团队的设计问题,请使用Lock(_lockObject)。