有时,HashSet通过属性作为IEnumerable公开.
众所周知,对于enumerable.Count()代码检查它是否是一个集合,因此它不会枚举整个列表,而是采用快捷方式.
是否有使用Linq版本enumerable.Contains(x)和HashSets的类似检查?
p.s*_*w.g 17
从参考源,是的,但不是直接:
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);
}
Run Code Online (Sandbox Code Playgroud)
如果源可枚举实现ICollection<T>(并且HashSet<T>确实),则它使用集合的Contains方法.