1
Dictionary<TKey, TValue>.KeyCollection Class
实现从IEnumerable
的contains
通过扩展方法,其为O(n)为什么Dictionary <TKey,TValue> .KeyCollection类有它自己的Contains方法?
为什么没有具有天然一个与O(1)?这是一种HashSet不是吗?
Dictionary<TKey, TValue>.KeyCollection Class
实现从IEnumerable
的contains
通过扩展方法,其为O(n)为什么Dictionary <TKey,TValue> .KeyCollection类有它自己的Contains方法?
为什么没有具有天然一个与O(1)?这是一种HashSet不是吗?
它确实实施了自己的Contains。您无法通过扩展方法实现接口。请注意,它明确实现它,这意味着您首先必须将其投射到ICollection
以使用它。
此外,'Enumerable.Contains'检查它的参数是否实现了'ICollection',所以即使通过扩展方法调用它,操作也是O(1)。也就是说,'dict.Keys.Contains'与'dict.ContainsKey'一样快(忽略KeyCollection对象本身的创建,无论如何都是微不足道的)。 –
我的不好,在MSDN中没有看到明确的方法部分 – colinfang