8

我只是想知道 ConcurrentDictionary 怎么可能没有在 Visual Studio IDE 中可见的 Add 方法。我似乎只得到了 TryX 方法,例如 TryAdd、TryUpdate 等。

我可以看到这些ConcurrentDictionary工具IDictionary,如果我将其转换为IDictionary我会返回 Add Method。

我通过 iLSpy 查看了该类,我可以看到 Add Method 已完全实现,并且实际上确实在后台调用了 ConcurrentTryAdd方法。

我期待在 Add 方法上看到某种属性来抑制它,但我什么也没看到。

这是否已被 Microsoft 加入 IDE 以默认隐藏 Add 方法?

如果有人可以对此有所了解,将不胜感激

4

2 回答 2

9

他们不鼓励使用该Add方法,因为如果该键已存在于字典中,该方法将引发异常。对于大多数字典,开发人员可以编写代码以保证在任何正常情况下都不会抛出异常。但是,要使用并发Contains字典执行此操作(后跟Add),您需要在访问字典的方法中使用排他锁,这违背了并发字典的全部目的。

TryAdd结合ContainsAdd检查而不需要您锁定字典,并允许您再次编写在正常情况下不会引发异常的代码。

于 2013-04-05T14:55:04.343 回答
7

那是因为显式接口实现。请参阅http://msdn.microsoft.com/en-us/library/aa288461(v=vs.71).aspx

于 2013-04-05T08:21:02.967 回答