我应该如何获得 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。
我正在写一些代码,然后去获取 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。