Comment Convertir List<string> pour ReadOnlyCollection<string> en C#
Je veux convertir les entrées d'une liste de chaînes à:
System.Collections.ObjectModel.ReadOnlyCollection<string>
J'ai essayé d'utiliser:
(System.Collections.ObjectModel.ReadOnlyCollection<string>)listname
Mais il renvoie une erreur.
- double possible de Retour ReadOnlyCollection de IList<>
Vous devez vous connecter pour publier un commentaire.
Vous pouvez créer une nouvelle instance à l'aide de la Liste existante dans le constructeur.
ReadOnlyCollection(T) Constructeur, sur MSDN
Si vous avez:
List<string> names=new List<string>(){"Rod", "Jane", "Freddy"};
Alors vous pouvez dire:
ReadOnlyCollection<string> readOnlyNames=names.AsReadOnly();
Ce n'est pas la copie de la liste. Au lieu de la readonly collection stocke une référence à la liste d'origine et interdit de le modifier. Toutefois, si vous modifiez la liste sous-jacente via
names
puis lereadOnlyNames
va aussi changer, il est donc préférable de jeter l'écriture de l'instance si vous le pouvez.Le constructeur de ReadOnlyCollection accepte un IList
Voici de référence http://msdn.microsoft.com/en-us/library/ms132476.aspx
Les autres réponses sont correctes, en qui vous avez besoin pour passer un
IList<T>
au constructeur d'uneReadOnlyCollection<T>
.Je trouve qu'il est utile d'avoir une méthode d'extension sur
IEnumerable<T>
qui facilite la création de laReadOnlyCollection<T>
:source.ToReadOnlyCollection()
est à peu près équivalent à lasource.ToList().AsReadOnly()
. (Aussi, votre code se comporte différemment selon si oui ou non le passé-IEnumerable<>
est déjà unIList<>
. Si c'est pour toute les futures mutations de la source, de collecte sera reflété dans votreReadOnlyCollection<>
; si elle n'est pas alors votreReadOnlyCollection<>
est effectivement immuable.)