我应该如何获得 IEnumerable 的长度?

How should I get the length of an IEnumerable?

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

如果您需要读取 IEnumerable<T> 中的项目数,您必须调用扩展方法 Count通常(查看Matthew 评论)会在内部遍历序列的元素,它会 return 你序列中的项目数。没有其他更直接的方法。

如果您知道您的序列是一个数组,您可以转换它并使用 Length 属性.

不行,以后的版本就没有这个方法了

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