哪种方法更好:.Any()与.Count() > 0?

27 浏览
0 Comments

哪种方法更好:.Any()与.Count() > 0?

System.Linq命名空间中,我们现在可以扩展我们的IEnumerable,以拥有Any()Count()扩展方法。

最近有人告诉我,如果想要检查一个集合中是否包含1个或更多的项,应该使用.Any()扩展方法,而不是.Count() > 0扩展方法,因为.Count()扩展方法必须迭代所有项。

其次,有些集合有一个属性(不是扩展方法),即CountLength。使用这些属性,而不是.Any().Count(),是否更好?

是/否?

admin 更改状态以发布 2023年5月21日
0
0 Comments

输出内容缺失

0
0 Comments

如果你的数据源拥有.Length.Count属性(如ICollectionIListList等),那么使用这些属性将是最快的选择,因为它不需要像Any()那样去执行GetEnumerator()/MoveNext()/Dispose()方法来检查是否存在非空的IEnumerable序列。

对于只有IEnumerable的情况,Any()通常更快,因为它只需要查看一个枚举。但是,需要注意的是,Count()的LINQ-to-Objects实现确实检查了ICollection(使用.Count作为优化),因此如果底层数据源是一个直接的列表/集合,那么不会有太大的差异。不要问我为什么它不使用非泛型的ICollection……

当然,如果你使用LINQ对其进行过滤等操作(如Where等),则会得到一个基于迭代块的序列,因此这个ICollection优化是无用的。

通常情况下,对于IEnumerable:请使用Any() ;-p

0