2013-04-05 63 views
4

我只是想知道如何可能ConcurrentDictionary不具有在Visual Studio IDE中可見的Add方法。我似乎只能得到TryX方法,例如TryAdd,TryUpdate等。爲什麼Concurrent Dictionary沒有可見的Add()方法?

我可以看到ConcurrentDictionary執行IDictionary,如果我將它轉換爲IDictionary,我會返回Add方法。

我已經通過iLSpy查看了該類,並且我可以看到添加方法已完全實現,並且確實調用了引擎蓋下的併發TryAdd方法。

我期待在Add方法上看到某種Attribute來抑制它,但我什麼都看不到。

這是否已由微軟烘焙到IDE中以默認隱藏添加方法?

如果有人能在此提供一些線索我們將不勝感激

回答

6

這是因爲顯式接口實現。請參閱http://msdn.microsoft.com/en-us/library/aa288461(v=vs.71).aspx

+0

+1。知道這個 – AlexFoxGill 2013-04-05 08:27:35

+0

背後的決定會很有意思,謝謝。非常感謝 – 2013-04-05 08:35:57

+1

@AlexG我想這僅僅是因爲你*幾乎*當然不應該使用'Add',如果其他線程可能同時修改同一個字典,很難正確使用它。 – hvd 2013-04-05 08:36:40

3

他們不鼓勵使用Add方法,因爲如果密鑰已存在於字典中,該方法將引發異常。對於大多數字典而言,開發人員可以通過編寫代碼來確保在任何正常情況下都不會拋出異常。但是,要執行此操作(Contains後跟Add)和併發字典,您需要在訪問字典的方法中使用排它鎖,這會破壞併發字典的整個用途。

TryAdd結合了ContainsAdd檢查,無需您鎖定字典,並允許您再次編寫不會在正常情況下拋出異常的代碼。

相關問題