一尘不染

为什么数组实现IList?

c#

请参阅 System.Array 类的定义

public abstract class Array : IList, ...

从理论上讲,我应该能够写点东西并开心

int[] list = new int[] {};
IList iList = (IList)list;

我也应该能够从iList调用任何方法

 ilist.Add(1); //exception here

我的问题不是为什么我会得到异常,而是 为什么Array实现了IList


阅读 213

收藏
2020-05-19

共1个答案

一尘不染

因为数组允许按索引快速访问,并且IList/
IList<T>是唯一支持此功能的集合接口。因此,也许您真正的问题是“为什么没有索引器的常量集合的接口?” 对此,我没有答案。

也没有用于集合的只读接口。而且我想念那些超出索引器接口恒定大小的东西。

IMO应根据集合的功能,再有几个(通用)集合接口。而且名称也应该有所不同,List因为带有索引器的东西确实是愚蠢的IMO。

  • 只是枚举 IEnumerable<T>
  • 只读但没有索引器(.Count,.contains等)
  • 可调整大小但没有索引器,即设置为(添加,删除等)当前 ICollection<T>
  • 索引器(indexer,indexof,…)只读
  • 带索引器的恒定大小(带setter的索引器)
  • 带有分度器(插入,…)电流的可变大小 IList<T>

我认为当前的收集接口设计不好。但是,由于它们具有告诉您哪些方法有效的属性(这是这些方法的约定的一部分),因此不会违反替代原理。

2020-05-19