我正在写一些代码,然后去获取IEnumerable的长度。当我写myEnumerable.Count()
时,令我惊讶的是,它没有编译。在阅读Difference between IEnumerable Count() and Length之后,我意识到实际上是Linq给了我扩展方法。
使用.Length也不能为我编译。我使用的是旧版C#,所以也许这就是原因。
获取IEnumerable长度的最佳做法是什么?我应该使用Linq的Count()方法吗?还是有更好的方法。 .Length是否可以在更高版本的C#上使用?
或者,如果我需要计数,IEnumerable是错误的工具吗?我应该使用ICollection吗? Count the items from a IEnumerable<T> without iterating?说ICollection是一个解决方案,但如果你想要一个带有计数的IEnumerable,它是否是正确的解决方案?
强制性代码段:
var myEnumerable = IEnumerable<Foo>();
int count1 = myEnumerable.Length; //Does not compile
int count2 = myEnumerable.Count(); //Requires Linq namespace
int count3 = 0; //I hope not
for(var enumeration in myEnumerable)
{
count3++;
}
答案 0 :(得分:3)
如果您需要阅读IEnumerable<T>
中的项目数,则必须调用扩展方法Count
,其中一般(请参阅Matthew评论)将在内部遍历序列的元素,它将返回序列中的项目数。没有其他更直接的方式。
如果您知道您的序列是一个数组,您可以使用该Length
属性投射它并读取它们的数量。
不,在以后的版本中,没有任何此类方法。
有关Count
方法的实施细节,请查看here。