我该如何获得IEnumerable的长度?

时间:2018-05-21 11:52:43

标签: c# performance count ienumerable icollection

我正在写一些代码,然后去获取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++;
}

1 个答案:

答案 0 :(得分:3)

如果您需要阅读IEnumerable<T>中的项目数,则必须调用扩展方法Count,其中一般(请参阅Matthew评论)将在内部遍历序列的元素,它将返回序列中的项目数。没有其他更直接的方式。

如果您知道您的序列是一个数组,您可以使用该Length属性投射它并读取它们的数量。

不,在以后的版本中,没有任何此类方法。

有关Count方法的实施细节,请查看here