小编典典

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

all

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

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

其次,一些集合有一个 属性 (不是扩展方法)是Countor Length。使用它们而不是.Any()or会更好.Count()吗?

是的/不?


阅读 149

收藏
2022-03-04

共1个答案

小编典典

如果您从具有.Lengthor的东西开始.Count(例如ICollection<T>, IList<T>,List<T>等) -
那么这将是最快的选择,因为它不需要通过检查非空序列所需的GetEnumerator()//序列.MoveNext()``Dispose()``Any()``IEnumerable<T>

对于 just IEnumerable<T>, then 通常Any()会更快,因为它只需要查看一次迭代。但是,请注意,LINQ-to-
Objects 的实现确实会检查(用作优化) - 因此,如果您的基础数据源 直接* 是列表/集合,则不会有很大的不同。不要问我为什么不使用非泛型…
__Count()``ICollection<T>``.Count
*ICollection

当然,如果您使用 LINQ 对其进行过滤等(Where等等),您将拥有一个基于迭代器块的序列,因此这种ICollection<T>优化是无用的。

通常使用IEnumerable<T>: 坚持使用Any();-p

2022-03-04