Интерфейс IList<T>
включает в себя доступ по индексу в дополнение к операциям, не поддерживаемым свойством SortedList<TKey, TValue>.Keys
, таким как Add
, Remove
и Insert
.Почему свойство SortedList (TKey, TValue) .Keys является IList (TKey), а не ReadOnlyCollection (TKey)?
ReadOnlyCollection<T>
, например, возвращаемое значение List<T>.AsReadOnly
, реализует IList<T>
и, следовательно, обеспечивает доступ по индексу но скрывает незаконные операции, как Add
и т.д., реализовав их явно. Кроме того, это всего лишь обертка для основного списка; поэтому он не создает копию и поэтому (я бы предположил) не подвергался реальному результату.
Любая идея, почему SortedList<TKey, TValue.Keys
не является ReadOnlyCollection<TKey>
? (И по этой причине, почему Values
не является ReadOnlyColllection<TValue>
?)
Странно, что это не только сборник readonly, потому что если вы выполните сортировкуList.Values.Add (2); он выбрасывает исключение – Andrey
Точно! Очень любопытно ... –
Я думаю, что причина в том, что ReadOnlyCollection - это класс не интерфейс. с интерфейсом вы можете написать собственное хранение, но ReadOnlyCollection имеет свой собственный – Andrey