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

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

Un des rares avantages de Java par rapport à C # est la forme de la méthode Collections.unmodifiablelist (list) , qui semble être en retard depuis longtemps dans IList ou List .

Utiliser IEnumerable est la solution la plus simple à la question – ToList peut être utilisé et renvoie une copie.

Vous recherchez ReadOnlyCollection , qui existe depuis .NET2.

 IList foo = ...; // ... ReadOnlyCollection bar = new ReadOnlyCollection(foo); 

ou

 List foo = ...; // ... ReadOnlyCollection bar = foo.AsReadOnly(); 

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

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

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

En 2.0, vous pouvez appeler AsReadOnly pour obtenir une version en lecture seule de la liste. Ou enveloppez un IList existant dans un object ReadOnlyCollection.

Quel est le problème avec System.Collections.ObjectModel.ReadOnlyCollection ?

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

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