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.
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.
Que diriez-vous du ReadOnlyCollection déjà dans le cadre?
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.
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
.
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.
Quel est le problème avec System.Collections.ObjectModel.ReadOnlyCollection ?