【发布时间】:2013-06-21 15:17:33
【问题描述】:
给定一个初始化的IEnumerable:
IEnumerable<T> enumerable;
我想确定它是否包含多个元素。我认为最明显的方法是:
enumerable.Count() > 1
但是,我相信Count() 枚举了 整个 集合,这对于这个用例来说是不必要的。例如,如果集合包含大量元素或从外部来源提供其数据,则这在性能方面可能会非常浪费。
如何在不枚举超过 2 个元素的情况下做到这一点?
【问题讨论】:
-
如果你必须依靠它,然后做点什么,你最好强迫它评估成一个列表或其他集合。
-
@devshorts,依靠它,你的意思是依靠它工作还是使用
Count()方法? -
我的意思是如果你需要找出它上面有多少元素,然后根据它做一些事情,你不妨评估一下。
Count将评估一次,然后如果您再次迭代它,您必须再次评估所有内容。与任何其他IEnumerable方法相同,例如Take或Skip。这真的取决于数据是什么。 -
@devshorts,谢谢;我同意不要重复列举很重要。但是,请记住,在某些情况下,您可能只关心这个单一标准并且不想对可枚举做任何其他工作。
-
如果底层
IEnumerable是Array、ICollection或IQueryable,您可能要考虑坚持使用Count(),因为Count()已优化以检测这些并使用长度/Count 属性视情况而定。