为什么 IList 不包含 Length 属性

本文关键字:包含 Length 属性 IList 为什么 | 更新日期: 2023-09-27 18:31:33

我试着这样做:

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

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

"System.Collections.Generic.IList"不包含定义 对于"长度"并且没有扩展方法"长度"接受第一个 类型为"System.Collections.Generic.IList"的参数可以是 找到(是否缺少 using 指令或程序集引用?

这让我思考,为什么List<T>没有Length属性?我知道你可以改用Count(),但Length的时间复杂度为 O(1)。

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

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

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