我很想知道这两者在所有情况下是否在功能上都是等效的。
通过更改字典的默认比较器,这两者在功能上是否有所不同?
另外,isn&#t; t Keys.Contains
几乎可以保证更慢?
答案 0 :(得分:21)
这两个功能完全相同。
Keys.Contains
存在,因为Keys
是ICollection<TKey>
,定义了Contains
方法。
标准Dictionary<TKey, TValue>.KeyCollection
实现(类,而不是接口)将其定义为
bool ICollection<TKey>.Contains(TKey item){
return dictionary.ContainsKey(item);
}
由于它是明确实现的,你甚至无法直接调用它。
你要么看到我在上面解释过的接口,要么看到LINQ Contains()
扩展方法,它也会调用本机实现,因为它实现了ICollection<T>
。
答案 1 :(得分:9)
虽然它们与Dictionary<,>
非常相同,但我发现坚持ContainsKey()
会更安全。
原因是将来您可能决定使用ConcurrentDictionary<,>
(使您的代码成为线程安全的),并且在该实现中,ContainsKey
明显更快(因为访问{{1} }属性执行一大堆锁定并创建一个新集合。)