C# 为什么';t字典<;TKey,TValue>;。KeyCollection类是否有自己的Contains方法?
C# 为什么';t字典<;TKey,TValue>;。KeyCollection类是否有自己的Contains方法?,c#,linq,C#,Linq,Dictionary.KeyCollection类通过扩展方法从IEnumerable实现包含,即O(n) 为什么它没有一个带有O(1)的本地的呢?它是一种哈希集,不是吗?它确实实现了自己的哈希集。不能通过扩展方法实现接口。请注意,它显式地实现了它,这意味着您必须首先将其强制转换为ICollection才能使用它。此外,Enumerable.Contains检查其参数是否实现了ICollection,因此即使您通过扩展方法调用它,操作也是O(1)。也就是说,dict.Keys.Contains的
Dictionary.KeyCollection类
通过扩展方法从IEnumerable
实现包含
,即O(n)
为什么它没有一个带有O(1)的本地的呢?它是一种哈希集,不是吗?它确实实现了自己的哈希集。不能通过扩展方法实现接口。请注意,它显式地实现了它,这意味着您必须首先将其强制转换为
ICollection
才能使用它。此外,Enumerable.Contains
检查其参数是否实现了ICollection
,因此即使您通过扩展方法调用它,操作也是O(1)。也就是说,dict.Keys.Contains
的速度与dict.ContainsKey
的速度一样快(忽略KeyCollection
对象本身的创建,这本身并不重要)。我的错是,在MSDNRelated中没有看到显式方法部分: