有时候,一个HashSet会通过属性作为IEnumerable暴露出来。
众所周知,对于enumerable.Count(),代码会检查它是否是一个集合,因此它不会枚举整个列表,而是采取捷径。
在使用Linq版本的enumerable.Contains(x)和HashSets时,是否有类似的检查?
众所周知,对于enumerable.Count(),代码会检查它是否是一个集合,因此它不会枚举整个列表,而是采取捷径。
在使用Linq版本的enumerable.Contains(x)和HashSets时,是否有类似的检查?
Enumerable.Count()
会检查对象是否为ICollection
类型,如果是,则返回ICollection.Count
以进行优化。如果不是,则必须枚举可枚举对象以计算项数。 - cdhowieICollection
还有一个Contains
方法,可以实现专门的逻辑。例如,在HashSet<T>
的情况下,它可以在平均 O(1) 时间内执行测试,而不是枚举元素直到找到匹配项。 - cdhowie