39 votes

Comment convertir la liste<string> en ReadOnlyCollection<string> en C#

Je veux convertir les éléments saisis en une liste de chaînes en :

System.Collections.ObjectModel.ReadOnlyCollection<string>

J'ai essayé d'utiliser :

(System.Collections.ObjectModel.ReadOnlyCollection<string>)listname

Mais il renvoie une erreur.

53voto

Balthy Points 696

Vous pouvez créer une nouvelle instance à l'aide de la liste existante dans le constructeur.

var readOnlyList = new ReadOnlyCollection<string>(existingList);

ConstructeurReadOnlyCollection (Of T) sur MSDN

35voto

Sean Points 22088

Si vous avez :

List<string> names=new List<string>(){"Rod", "Jane", "Freddy"};

Alors vous pouvez dire :

ReadOnlyCollection<string> readOnlyNames=names.AsReadOnly();

Ça ne copie pas la liste. Au lieu de cela, la collection en lecture seule stocke une référence à la liste d'origine et interdit de la modifier. Cependant, si vous modifiez la liste sous-jacente via names alors le readOnlyNames changera également, il est donc préférable de supprimer l'instance inscriptible si vous le pouvez.

4voto

ryudice Points 10016
var readonlyCollection = new ReadOnlyCollection<string>(list);

3voto

John Hartsock Points 36565

Le constructeur de ReadOnlyCollection accepte un IList

Voici quelques références http://msdn.microsoft.com/en-us/library/ms132476.aspx

var myreadonlycollection = new ReadOnlyCollection<string>(listname);

1voto

casperOne Points 49736

Les autres réponses sont correctes en ce sens que vous devez passer un IList<T> au constructeur d'un ReadOnlyCollection<T>.

Je trouve utile d'avoir une méthode d'extension sur IEnumerable<T> qui facilite la création du ReadOnlyCollection<T> :

public static ReadOnlyCollection<T> ToReadOnlyCollection<T>(
    this IEnumerable<T> source)
{
    if (source == null) throw new ArgumentNullException("source");

    return new ReadOnlyCollection<T>(
        source as IList<T> ?? source.ToList());
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X