从ConcurrentDictionary转换为IDictionary

时间:2012-04-11 18:55:14

标签: c# .net concurrency thread-safety

从ConcurrentDictionary到IDictionary的转换是否会切断线程安全的实现,因为IDictionary没有GetOrAdd和AddOrUpdate方法?

5 个答案:

答案 0 :(得分:10)

结果对象仍然是并发字典。像Add或Remove这样的调用使用底层实现TryAdd和TryRemove(它们是线程安全的)。将对象转换为其他类型不会更改对象本身。

另外,为了澄清,您可以使用ILSpy之类的工具来查看默认IDictionary方法的实现以及它们是否仍然是线程安全的。

答案 1 :(得分:6)

IDictionary只是一个界面。如果转换为它,结果是ConcurrentDictionary的实现,缺少GetOrAddAddOrUpdate方法。

据推测,您仍然可以使用Item属性以及AddContainsKey方法(代替GetOrAddAddOrUpdate)方法,以及您的转换对象仍然是线程安全的(因为底层实现是ConcurrentDictionary)。

答案 2 :(得分:1)

接口不会影响实现。它只是没有暴露一些ConcurrentDictionary的方法。

您可能会发现thisthis有助于理解界面。

答案 3 :(得分:0)

通过ConcurrentDictionary形状的钥匙孔查看大IDictionary个对象 - 您只能看到IDictionary形状,但它仍然是ConcurrentDictionary

答案 4 :(得分:-1)

简短回答否。

您正在通过接口操作对象,因此仍然使用具体实现。您没有丢失任何功能或方法。它们不可用。

在旁注中,你需要在向下转换时进行显式转换,在向上转换时不需要显式转换 - 总是安全的。

相关问题