Linq Contains()检查HashSet吗?

时间:2014-08-12 22:22:28

标签: c# linq hashset

有时HashSet通过属性公开为IEnumerable。

众所周知,对于enumerable.Count(),代码会检查它是否是一个集合,因此它不会枚举整个列表,而是采用快捷方式。

是否有使用Linq版enumerable.Contains(x)和HashSets的类似检查?

2 个答案:

答案 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>备注)。