一般情况下,我使用List
,然后在我不再需要更新时将其返回为IEnumerable
。
然而,我遇到了一个问题,我实际上需要通过它们进行枚举,但首先需要知道计数。
IEnumerable
会枚举每个项目并找到计数(O(N)),还是会依赖List
的Count属性(O(1))?
另外,如果IEnumerable
是LINQ查询的结果怎么办?
答案 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>
,则该实现用于获取元素的数量。否则,此方法确定计数。