Поскольку массив допускает быстрый доступ по индексу, и IList
/ IList<T>
- это единственные интерфейсы коллекции, которые поддерживают это.Так что, возможно, ваш реальный вопрос: «Почему нет интерфейса для константных коллекций с индексаторами?»И на это у меня нет ответа.
Нет никаких интерфейсов только для чтения для коллекций.И я скучаю по тем, что даже больше, чем интерфейс постоянного размера с индексаторами.
IMO должно быть несколько (универсальных) интерфейсов коллекции в зависимости от функций коллекции.И имена тоже должны были быть разными, List
для чего-то с индексатором действительно глупо IMO.
- Просто перечисление
IEnumerable<T>
- Только для чтения, но без индексатора (.Count,.Contains, ...)
- Изменяемый размер, но без индексатора, т. Е. Устанавливается как (Добавить, Удалить, ...) текущий
ICollection<T>
- Только для чтения с индексатором (indexer, indexof, ...)
- Постоянный размер с индексатором (индексатор с установщиком)
- Переменный размер с индексатором (Insert, ...) текущий
IList<T>
Я думаютекущие интерфейсы коллекции плохой дизайн.Но поскольку у них есть свойства, указывающие, какие методы являются действительными (и это является частью контракта этих методов), это не нарушает принцип подстановки.