Оскільки масив дозволяє швидкий доступ через індекс, і IList
/ IList<T>
є єдиними інтерфейсами колекції, які підтримують це. Тож, можливо, ваше справжнє запитання: "Чому немає інтерфейсу для постійних колекцій з індексаторами?" І на це я не маю відповіді.
Для колекцій також немає інтерфейсів для читання. І мені не вистачає таких, навіть більше, ніж постійний розмір з інтерфейсом індексаторів.
IMO повинно бути ще кілька (загальних) інтерфейсів колекції, залежно від особливостей колекції. І назви теж повинні були бути різними, List
бо щось із індексом справді дурне ІМО.
- Просто перерахування
IEnumerable<T>
- Читайте лише, але без індексатора (.Count, .Contains, ...)
- Зміна розміру, але не має індексатора, тобто встановити як (Add, Remove, ...) current
ICollection<T>
- Читайте лише за допомогою індексатора (indexer, indexof, ...)
- Постійний розмір з індексатором (індексатор із сеттером)
- Змінна величина з індексатором (Вставка, ...) струму
IList<T>
Я думаю, що поточні інтерфейси колекції - це поганий дизайн. Але оскільки у них є властивості, які говорять про те, які методи є дійсними (і це є частиною договору цих методів), він не порушує принцип заміни.