字典键.Contains与ContainsKey:它们在功能上等效吗

本文关键字:功能上 Contains ContainsKey 字典 | 更新日期: 2023-09-27 18:15:23

我很想知道这两者在所有情况下是否在功能上等效。

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

另外,难道Keys.Contains不一定会更慢吗?

字典键.Contains与ContainsKey:它们在功能上等效吗

这两个函数的作用完全相同。

Keys.Contains的存在是因为Keys是定义Contains方法的ICollection<TKey>
标准Dictionary<TKey, TValue>.KeyCollection实现(类,而不是接口(将其定义为

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

由于它是显式实现的,您甚至不能直接调用它。


您看到的要么是我上面解释的接口,要么是LINQ Contains()扩展方法,它也将调用本机实现,因为它实现了ICollection<T>

虽然它们与Dictionary<,>相当,但我发现使用ContainsKey()要安全得多。

原因是将来您可能会决定使用ConcurrentDictionary<,>(以确保代码线程的安全(,并且在该实现中,ContainsKey要快得多(因为访问Keys属性会执行一大堆锁定并创建一个新集合(。