关于c#:Linq Contains()检查HashSet吗?

Does Linq Contains() check for HashSet?

有时哈希集通过属性作为IEnumerable公开。

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

使用enumerable.Contains(x)和hashset的linq版本有没有类似的检查?


从参考源来看,是的,虽然不是直接:

1
2
3
4
5
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);
}

如果源Enumerable实现ICollection(和HashSet实现),则使用集合的Contains方法。


注:还记录了查找ICollection(见备注)。