C# Linq Contains()是否检查哈希集?

C# Linq Contains()是否检查哈希集?,c#,linq,hashset,C#,Linq,Hashset,有时,哈希集通过属性作为IEnumerable公开 众所周知,对于enumerable.Count()代码会检查它是否是一个集合,因此它不会枚举整个列表,而是使用快捷方式 对于使用可枚举文件的Linq版本,是否有类似的检查。包含(x)和哈希集?来自,是的,但不是直接检查: public static bool Contains<TSource>(this IEnumerable<TSource> source, TSource value) { ICollecti

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

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

对于使用可枚举文件的Linq版本,是否有类似的检查。包含(x)和哈希集?

来自,是的,但不是直接检查:

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);
}
公共静态bool包含(此IEnumerable源,TSource值){
ICollection collection=源作为ICollection;
if(collection!=null)返回collection.Contains(value);
返回包含(源、值、空);
}

如果源可枚举对象实现了(并且实现了),那么它将使用集合的方法。

注意,还需要查找
ICollection
(请参见备注)。

Count()的快捷方式是一个属性。属性如何正确地为动态表达式返回布尔值?为什么不看看你自己:你的确切意思是什么?…如果在查询中调用contains(x)只会检查列表的一部分?@TravisJ的意思是
Enumerable.Count()
检查对象是否为
ICollection
类型,如果是,则返回
ICollection.Count
作为优化。如果不是,则必须枚举可枚举项才能对项目进行计数。@cdhowie-是的,我理解这一点,但这与
包含
?+1有什么关系?但我要指出的是,它不会专门检查
哈希集
(这是所问的问题),而是会检查
ICollection
,因此,无需具备HashSet的专业知识即可完成相同的任务。