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?"

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");

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"});

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" };

Hoppla, sehen Sie so aus, als hätten mich fünf Leute geschlagen.
Richard Fawcett


3

Entfernen Sie die Klammern:

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

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" };

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" };

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" };
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.