为什么IList <t>不包含Length属性?

时间:2016-01-22 19:11:51

标签: c#

我试着这样做:

int listAverage = NumberList.Sum()/NumberList.Length;

其中NumberListIList。它抛出一个错误:

  

&#39; System.Collections.Generic.IList&#39;不包含定义   长度&#39;长度&#39;没有扩展方法&#39;长度&#39;接受第一个   类型&#39; System.Collections.Generic.IList&#39;的参数可能   发现(您是否缺少using指令或程序集引用?)

这让我想到了,why does List<T> not have a Length property?我知道您可以使用Count(),但Length的时间复杂度为O(1)。

1 个答案:

答案 0 :(得分:3)

根据我的经验,.NET中的规则似乎是数组和字符串具有Length,而更高级别的可数集合具有Count属性。 IList<T>具有Count属性,一般应该 O(1),但取决于具体实现。例如,最常用的List<T>肯定是在O(1)处。

泛型Count()方法是任何IEnumerable<T>类型的扩展,并且确实具有技术上的O(n)复杂性,因为在枚举每个元素或给定之前可能无法知道项目的数量该数字需要一些自定义处理(例如,IQueryable<T>接口表示的Linq to SQL查询结果。)