Dictionary Keys.Contains vs. ContainsKey:它们在function上是否相同?

我很想知道这两个在所有情况下是否在function上都是等效的。

是否有可能通过更改字典的默认比较器,这两者在function上会有所不同?

还有, Keys.Contains几乎不保证会变慢吗?

这两个函数完全相同。

Keys.Contains存在,因为KeysICollection ,它定义了Contains方法。
标准Dictionary.KeyCollection实现(类,而不是接口)将其定义为

 bool ICollection.Contains(TKey item){ return dictionary.ContainsKey(item); } 

由于它是明确实现的,因此您甚至无法直接调用它。


你要么看到我上面解释过的接口,要么看LINQ Contains()扩展方法,它也会调用本机实现,因为它实现了ICollection

虽然它们与Dictionary<,>几乎相同,但我发现坚持使用ContainsKey()会更安全。

原因是在将来你可能决定使用ConcurrentDictionary<,> (使代码线程安全),并且在该实现中, ContainsKey明显更快(因为访问Keys属性会执行一大堆锁定并创建一个新系列)。