web-dev-qa-db-fra.com

Liste en lecture seule ou liste non modifiable dans .NET 4.0

D'après ce que je peux dire, .NET 4.0 manque toujours de listes en lecture seule. Pourquoi le framework n'a-t-il toujours pas cette fonctionnalité? N'est-ce pas l'une des fonctionnalités les plus courantes pour conception pilotée par domaine ?

L'un des rares avantages Java a sur C # est ceci sous la forme de la méthode Collections.unmodifiablelist (list) , qui semble être attendue depuis longtemps dans IList <T > ou Liste <T>.

En utilisant IEnumerable<T> est la solution la plus simple à la question - ToList peut être utilisé et renvoie une copie.

97
Chris S

Vous recherchez ReadOnlyCollection , qui existe depuis .NET2.

IList<string> foo = ...;
// ...
ReadOnlyCollection<string> bar = new ReadOnlyCollection<string>(foo);

ou

List<string> foo = ...;
// ...
ReadOnlyCollection<string> bar = foo.AsReadOnly();

Cela crée une vue en lecture seule , qui reflète les modifications apportées à la collection encapsulée.

141
LukeH

Que diriez-vous du ReadOnlyCollection déjà dans le cadre?

13
Jason Watts

Si le modèle le plus courant de la liste consiste à parcourir tous les éléments, IEnumerable<T> ou IQueryable<T> peut également servir de liste en lecture seule.

11
Ana Betts

Pour ceux qui aiment utiliser des interfaces: .NET 4.5 ajoute l'interface générique IReadOnlyList qui est implémentée par List<T> par exemple.

Il est similaire à IReadOnlyCollection et ajoute une propriété d'indexeur Item.

11
Martin

Dans 2.0, vous pouvez appeler AsReadOnly pour obtenir une version en lecture seule de la liste. Ou envelopper un IList existant dans un ReadOnlyCollection<T> objet.

8
Paul Alexander
7
Matthew Dresser