什么是最好/最简单的方法来获取IEnumerable集合中的项目数而不枚举集合中的所有项目?
可以使用LINQ或Lambda吗?
无论如何,你必须循环它.Linq提供的Count
方法:
var result = myenum.Count();
解决方案取决于您不希望通过集合枚举的原因.
如果是因为枚举集合可能很慢,那么没有更快的解决方案.如果可能,您可能需要考虑使用ICollection.除非枚举非常慢(例如,它从磁盘读取项目),速度不应该是一个问题.
如果是因为枚举集合将需要更多代码,那么它已经以.Count()扩展方法的形式为您编写.只需使用MyEnumerable.Count().
如果是因为您希望能够在计数后枚举该集合,那么.Count()扩展方法允许这样做.你甚至可以在你正在枚举的集合上调用.Count(),它将继续从计数之前的位置开始.例如:
foreach (int item in Series.Generate(5)) { Console.WriteLine(item + "(" + myEnumerable.Count() + ")"); }
会给出结果
0(5)
1(5)
2(5)
3(5)
4(5)
如果这是因为枚举有副作用(例如写入磁盘/控制台)或依赖于可能在计数和枚举之间改变的变量(例如从磁盘读取)[NB如果可能,我建议重新考虑体系结构,因为这可能导致很多问题]然后考虑的一个可能性是将枚举读入间歇存储.例如:
ListseriesAsList = Series.Generate(5).ToList();
以上所有假设您无法更改类型(即,它是从您不拥有的库中返回的).如果可能,您可能需要考虑更改为使用ICollection或IList(ICollection的范围比IList更广泛),其上有一个Count属性.
您必须枚举以获得计数.像List这样的其他构造保持运行计数.
用这个.
IEnumerable list =..........; list.OfType().Count()
它将返回计数.