为什么并发字典没有一个可见的Add()方法

本文关键字:Add 方法 并发 字典 有一个 为什么 | 更新日期: 2023-09-27 18:07:49

我只是想知道这是怎么可能的,ConcurrentDictionary没有一个添加方法,这是可见的Visual Studio IDE。我似乎只得到TryX方法,如TryAdd, TryUpdate等。

我可以看到ConcurrentDictionary实现了IDictionary,如果我将其转换为IDictionary,我将获得添加方法。

我已经通过iLSpy查看了这个类,我可以看到Add方法是完全实现的,并且实际上在底层调用Concurrent TryAdd方法。

我期望在Add方法上看到某种属性来抑制它,但我没有看到任何东西。

这是被烤到IDE由微软隐藏Add方法默认吗??

如果有人能解释一下,我将不胜感激

为什么并发字典没有一个可见的Add()方法

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

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

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