Linq Contains() 是否检查 HashSet?
Linq Contains() 是否检查 HashSet?
有时候,一个 HashSet 会以 IEnumerable 的形式通过属性进行暴露。
众所周知,对于 enumerable.Count()
,代码会检查它是否是一个集合,因此它不会枚举整个列表,而是采取一些捷径。
在使用 Linq 版本的 enumerable.Contains(x)
和 HashSets 时,是否有类似的检查机制?
admin 更改状态以发布 2023年5月20日
从参考源码可以看出,它确实可以这么做, 但并不是直接的方式:
public static bool Contains(this IEnumerable source, TSource value) { ICollection collection = source as ICollection ; if (collection != null) return collection.Contains(value); return Contains (source, value, null); }
如果源枚举实现了ICollection
接口(如HashSet
),则使用该集合的Contains
方法。