Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么';t字典<;TKey,TValue>;。KeyCollection类是否有自己的Contains方法?_C#_Linq - Fatal编程技术网

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中没有看到显式方法部分: