【发布时间】:2016-01-12 04:06:33
【问题描述】:
实现 System.Collection.ICollection 的类知道它们的序列中有多少元素。它们有一个属性 Count,它返回序列的数量。例如列表、字典和队列。
实现 IEnumerable 的其他类可能不会实现 ICollection。你没有财产数。但是,您仍然可以通过枚举所有元素并计算它们来知道序列中的元素数量。
对我来说,后一种方法似乎要慢得多。
Enumerable.Count(this IEnumerable) 方法唯一知道该序列的是它实现了 IEnumerable。它不知道该序列有一个属性可以为您提供元素数量。
通常这意味着如果您 Count() 一个 List,该函数必须遍历所有元素。
但是,Enumerable.Count(IEnumerable) 的实现可以检查序列是否实现了接口 ICollection,如果是,它可以返回 Count 而不是对其进行枚举。
问题:Enumerable.Count(this IEnumerable) 是否足够聪明,可以检查序列是否实现了 ICollection,或者它是否总是遍历所有元素?
如果是后者,使用 Count 函数扩展 Enumerable 是否明智,该函数检查对象是否实现 ICollection,如果是则返回 ICollection.Count()?
【问题讨论】:
标签: linq count ienumerable enumerable