为什么 IList 不包含 Length 属性
本文关键字:包含 Length 属性 IList 为什么 | 更新日期: 2023-09-27 18:31:33
我试着这样做:
int listAverage = NumberList.Sum()/NumberList.Length;
其中NumberList
是IList
.它抛出一个错误:
"System.Collections.Generic.IList"不包含定义 对于"长度"并且没有扩展方法"长度"接受第一个 类型为"System.Collections.Generic.IList"的参数可以是 找到(是否缺少 using 指令或程序集引用?
这让我思考,为什么List<T>
没有Length
属性?我知道你可以改用Count()
,但Length
的时间复杂度为 O(1)。
根据我的经验,.NET 中的约定似乎是数组和字符串具有 Length
属性,而更高级别的可数集合具有Count
属性。IList<T>
具有Count
属性,该属性通常应为 O(1),但取决于确切的实现。例如,最常用的List<T>
肯定是在 O(1) 处。
泛型 Count()
方法是任何IEnumerable<T>
类型的扩展,这在技术上确实具有 O(n) 复杂性,因为在枚举每个元素之前可能不知道项数,或者给出数量需要一些自定义处理(例如,由IQueryable<T>
接口表示的 Linq to SQL 查询结果)。