有时HashSet通过属性公开为IEnumerable。
众所周知,对于enumerable.Count()
,代码会检查它是否是一个集合,因此它不会枚举整个列表,而是采用快捷方式。
是否有使用Linq版enumerable.Contains(x)
和HashSets的类似检查?
答案 0 :(得分:17)
来自reference source,是的,但不是直接:
public static bool Contains<TSource>(this IEnumerable<TSource> source, TSource value) {
ICollection<TSource> collection = source as ICollection<TSource>;
if (collection != null) return collection.Contains(value);
return Contains<TSource>(source, value, null);
}
如果源枚举实现ICollection<T>
(并且HashSet<T>
确实如此),则它使用集合的Contains
方法。
答案 1 :(得分:1)
另请注意ICollection<T>
documented({em>备注)。