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