Wie kann ich eine C # -Liste in derselben Zeile initialisieren, in der ich sie deklariere? (IEnumerable String Collection Beispiel)

107

Ich schreibe meinen Testcode und möchte nicht schreiben:

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

Ich würde gerne schreiben

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

{"Eins", "zwei", "drei"} ist jedoch keine "IEnumerable string Collection". Wie kann ich dies mit der IEnumerable string Collection "in einer Zeile initialisieren?"

Johannes
quelle

Antworten:

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

Im Wesentlichen lautet die Syntax:

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

Welches vom Compiler übersetzt wird als

List<string> list = new List<string>();
list.Add("One");
list.Add("Two");
list.Add("Three");
Matthew Abbott
quelle
Ich mag diese Methode ohne Klammern. Mit welcher C # -Version hat das angefangen?
SilverbackNet
9
Es ist nicht ganz so übersetzt, zumindest nicht im Allgemeinen. Die Zuweisung zur Variablen erfolgt nach allen AddAufrufen - es ist, als würde eine temporäre Variable verwendet, mit list = tmp;am Ende. Dies kann wichtig sein , wenn Sie die Neuzuweisung den Wert einer Variablen.
Jon Skeet
Automatische Eigenschaften und Objektinitialisierer wurden mit .NET 3 eingeführt. Ich glaube, es ist dieselbe Framework-Version, nur ein aktualisierter Compiler zur Unterstützung von LINQ.
Matthew Abbott
@ Jon, Prost, ich habe diesen Teil nie gekannt. : D
Matthew Abbott
@ Jon Skeet: "... Dies kann wichtig sein, wenn Sie den Wert einer Variablen neu zuweisen." Können Sie diese Bemerkung etwas näher erläutern?
Tony
17

Ändern Sie den Code in

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

oder

List<string> nameslist = new List<string>(new[] {"one", "two", "three"});
Adriaan Stander
quelle
Was ist der Zweck der Verwendung der zweiten Zeile "List <string> nameslist = new List <string> (new [] {" eins "," zwei "," drei "});" wann können wir sie verwenden? Was bedeutet "new [] {...}" in der zweiten Syntax? Warum wird ein neues Schlüsselwort zusammen mit der Klammer [] verwendet?
Tony
6

Verliere einfach die Klammer:

var nameslist = new List<string> { "one", "two", "three" };
Richard Fawcett
quelle
Hoppla, sehen Sie so aus, als hätten mich fünf Leute geschlagen.
Richard Fawcett
3
List<string> nameslist = new List<string> {"one", "two", "three"} ?
Romain Meresse
quelle
3

Entfernen Sie die Klammern:

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

Es hängt davon ab, welche Version von C # Sie verwenden. Ab Version 3.0 können Sie ...

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

Ich denke, das wird für int-, long- und string-Werte funktionieren.

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


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

Dies ist eine Möglichkeit.

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

Dies ist ein anderer Weg.

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

list2.Add(1);

list2.Add(2);

Gleiches gilt für Saiten.

Z.B:

List<string> list3 = new List<string> { "Hello", "World" };
Mindest
quelle