L'interface IList<T>
inclut l'accès par index en plus des opérations non prises en charge par la propriété SortedList<TKey, TValue>.Keys
telles que Add
, Remove
et Insert
.Pourquoi la propriété SortedList (TKey, TValue) .Keys est-elle un IList (TKey) plutôt qu'une ReadOnlyCollection (TKey)?
A ReadOnlyCollection<T>
, comme la valeur de retour de List<T>.AsReadOnly
, met en œuvre IList<T>
et offre donc un accès par index mais cache des opérations illégales comme Add
, etc. en les appliquant explicitement. En outre, il s'agit simplement d'un wrapper pour la liste sous-jacente; donc il ne crée pas de copie et devrait donc (je suppose) ne subir aucun véritable coup de performance.
Une idée pourquoi SortedList<TKey, TValue.Keys
n'est pas un ReadOnlyCollection<TKey>
? (Et d'ailleurs pourquoi la propriété Values
n'est pas un ReadOnlyColllection<TValue>
?)
Il est étrange qu'il ne soit pas readonly collection, car si vous faites triedList.Values.Add (2); il jette l'exception – Andrey
Exactement! Très curieux ... –
Je pense que la raison est que ReadOnlyCollection est classe non interface. Avec l'interface, vous pouvez écrire un stockage personnalisé, mais ReadOnlyCollection a son propre – Andrey