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

Lea*_*Dev 13 c# linq ienumerable

一般情况下,我使用a List然后返回它们,IEnumerable因为我不再需要更新它们.

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

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

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

Jon*_*eet 14

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

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

这只是证明ICollection<T>,但是:

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

  • 供参考,以下是实际实现:http://referencesource.microsoft.com/#System.Core/System/Linq/Enumerable.cs,41ef9e39e54d0d0b (2认同)