应该避免使用IEnumerable的Count()吗?

时间:2015-08-04 17:41:43

标签: c# linq ienumerable

一般情况下,我使用List,然后在我不再需要更新时将其返回为IEnumerable

然而,我遇到了一个问题,我实际上需要通过它们进行枚举,但首先需要知道计数。

IEnumerable会枚举每个项目并找到计数(O(N)),还是会依赖List的Count属性(O(1))?

另外,如果IEnumerable是LINQ查询的结果怎么办?

1 个答案:

答案 0 :(得分:14)

  

IEnumerable会枚举每个项目并找到计数(O(N)),还是会依赖List的Count属性(O(1))?

它将使用Count属性。基本上,实现检查对象是否实现ICollection<T>ICollection,如果是,则调用相关的Count属性。 (非泛型ICollection的使用仅在.NET 4中引入;在.NET 3.5中,它只注意到ICollection<T>。)

ICollection<T>只有documented,但是:

  

如果源的类型实现ICollection<T>,则该实现用于获取元素的数量。否则,此方法确定计数。