Evo*_*lor 7 c# linq performance ienumerable count
我正在编写一些代码,然后去获取 IEnumerable 的长度。当我写的时候myEnumerable.Count(),令我惊讶的是,它没有编译。在阅读了 IEnumerable Count() 和 Length 之间的差异后,我意识到实际上是 Linq 为我提供了扩展方法。
使用 .Length 也不适合我。我使用的是旧版本的 C#,所以也许这就是原因。
获取 IEnumerable 长度的最佳实践是什么?我应该使用 Linq 的 Count() 方法吗?或者有更好的方法。.Length 在更高版本的 C# 中可用吗?
或者,如果我需要计数,IEnumerable 是否是该工作的错误工具?我应该改用 ICollection 吗? 在不迭代的情况下计算 IEnumerable<T> 中的项目?说 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++;
}
Run Code Online (Sandbox Code Playgroud)
如果您需要读取一个中的项目数,IEnumerable<T>您必须调用扩展方法Count,通常(查看马修评论)将在内部迭代序列的元素,它将返回序列中的项目数。没有其他更直接的方法了。
如果您知道您的序列是一个数组,则可以使用 thLength属性对其进行转换并读取它们的项目数。
不,在以后的版本中没有任何这样的方法。
关于Count方法的实现细节,请看这里。
| 归档时间: |
|
| 查看次数: |
13490 次 |
| 最近记录: |