Comment puis-je initialiser une liste C # dans la même ligne que je la déclare. (Exemple de collection de chaînes IEnumerable)

107

J'écris mon testcode et je ne veux pas écrire:

List<string> nameslist = new List<string>();
nameslist.Add("one");
nameslist.Add("two");
nameslist.Add("three");

J'adorerais écrire

List<string> nameslist = new List<string>({"one", "two", "three"});

Cependant {"un", "deux", "trois"} n'est pas une "Collection de chaînes IEnumerable". Comment puis-je initialiser ceci en une ligne en utilisant la collection de chaînes IEnumerable "?

Johannes
la source

Réponses:

168
var list = new List<string> { "One", "Two", "Three" };

La syntaxe est essentiellement:

new List<Type> { Instance1, Instance2, Instance3 };

Ce qui est traduit par le compilateur comme

List<string> list = new List<string>();
list.Add("One");
list.Add("Two");
list.Add("Three");
Matthew Abbott
la source
J'aime cette méthode sans parenthèses, par quelle version c # cela a-t-il commencé?
SilverbackNet
9
Ce n'est pas tout à fait traduit en cela, du moins pas en général. L'affectation à la variable se produit après que tous les Addappels ont été effectués - c'est comme si elle utilisait une variable temporaire, avec list = tmp;à la fin. Cela peut être important si vous réaffectez la valeur d'une variable.
Jon Skeet
Les propriétés automatiques et les initiateurs d'objets ont été introduits avec .NET 3 Je crois que c'est la même version de Framework, juste un compilateur mis à jour pour prendre en charge LINQ.
Matthew Abbott
@Jon, Cheers, je n'ai jamais connu cette partie. : D
Matthew Abbott
@Jon Skeet: "... Cela peut être important si vous réaffectez la valeur d'une variable." pouvez-vous expliquer un peu plus sur cette remarque?
Tony
17

Changez le code en

List<string> nameslist = new List<string> {"one", "two", "three"};

ou

List<string> nameslist = new List<string>(new[] {"one", "two", "three"});
Adriaan Stander
la source
à quoi sert la deuxième ligne "List <string> nameslist = new List <string> (new [] {" one "," two "," three "});" quand pouvons-nous l'utiliser? Aussi quelle est la signification de "new [] {...}" dans la seconde syntaxe? Pourquoi new mot-clé est utilisé avec la parenthèse [] ???
Tony
6

Perdez simplement la parenthèse:

var nameslist = new List<string> { "one", "two", "three" };
Richard Fawcett
la source
Oups, on dirait que cinq personnes m'ont battu.
Richard Fawcett
3
List<string> nameslist = new List<string> {"one", "two", "three"} ?
Romain Meresse
la source
3

Supprimez les parenthèses:

List<string> nameslist = new List<string> {"one", "two", "three"};
Tim Robinson
la source
3

Cela dépend de la version de C # que vous utilisez, à partir de la version 3.0, vous pouvez utiliser ...

List<string> nameslist = new List<string> { "one", "two", "three" };
Sam Salisbury
la source
1

Je pense que cela fonctionnera pour les valeurs int, long et string.

List<int> list = new List<int>(new int[]{ 2, 3, 7 });


var animals = new List<string>() { "bird", "dog" };
Muhammad Awais
la source
0

C'est une manière.

List<int> list = new List<int>{ 1, 2, 3, 4, 5 };

C'est une autre manière.

List<int> list2 = new List<int>();

list2.Add(1);

list2.Add(2);

Il en va de même avec les chaînes.

Par exemple:

List<string> list3 = new List<string> { "Hello", "World" };
Min
la source