Linq Contains()检查HashSet吗?

Dir*_*oer 12 c# linq hashset

有时,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方法.

  • +但我会指出它*不*检查`HashSet <T>`*具体*(因为这是被问到的问题)但它会检查`ICollection <T>`,因此完成同样的事情,而不需要具有'HashSet <T>`的专业知识. (2认同)