字典键.Contains与ContainsKey:它们在功能上等效吗
本文关键字:功能上 Contains ContainsKey 字典 | 更新日期: 2023-09-27 18:15:23
我很想知道这两者在所有情况下是否在功能上等效。
有没有可能通过更改字典的默认比较器,这两者在功能上会有所不同?
另外,难道Keys.Contains
不一定会更慢吗?
这两个函数的作用完全相同。
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
属性会执行一大堆锁定并创建一个新集合(。