有时一个HashSet通过属性作为IEnumerable来显示.
众所周知,对于enumerable.Count(),代码检查它是否是一个集合,因此它不会枚举整个列表,而是需要一个快捷方式.
是否有类似的检查使用Linq版本的enumerable.Contains(x)和HashSets?
解决方法
从
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
方法.