如果我有ConcurrentDictionary
并希望使用Add()
功能,我需要转发IDictionary
:
var cd = new ConcurrentDictionary<int, int>();
cd.Add(1, 1); // Compile error: does not contain a definition for 'Add'
IDictionary<int, int> id = cd;
id.Add(1, 1); // Works
问题ConcurrentDictionary and IDictionary告诉我这是因为ConcurrentDictionary
使用私有方法明确地实现了IDictionary
。
我的问题:为什么 ConcurrentDictionary
是这样执行的?隐藏使用已实现的接口有什么好处?
答案 0 :(得分:5)
我的问题:为什么ConcurrentDictionary实现了那样?
我认为鼓励你考虑并发问题 - 多个线程可能同时编写相同的密钥。因此,添加现有密钥不太可能成为编程错误,应该仔细考虑。
AddOrUpdate
TryAdd
如果您发现自己经常需要现有的Add
行为,则可以随时编写自己的扩展方法。
答案 1 :(得分:0)
我认为您可以尝试使用ConcurrentDictionay中的TryAdd()或AddOrUpdate()方法,如您所见。
http://msdn.microsoft.com/es-es/library/dd287191(v=vs.110).aspx