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

标签 c# performance linq count 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 评论)会在内部迭代序列的元素,它会返回序列中的项目数。没有其他更直接的方法。

如果您知道您的序列是一个数组,您可以转换它并使用 Length 读取项目的数量。属性(property)。

没有,以后的版本没有这样的方法。

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

关于c# - 我应该如何获得 IEnumerable 的长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50448298/

相关文章:

c# - 创建可用作函数/方法的类型

c# - 使用 LINQ SQL 查明更新是否成功?

c# - 合并现有的音频文件并从中生成新的音频文件

c# - 加密文件大小的计算与真实大小不匹配

performance - Java - 重复函数调用减少执行时间

.net - 编译的 Linq & String.Contains

c# - 如何限制 MonoTouch 中的 UITextView 字符限制?

c# - 如何使用对象初始值设定项在 vb.net 中创建数组来设置属性

java - 将列表的第一个元素输入数组的最快方法

ios - iOS 开发框架基准