Jak mogę zainicjować listę C # w tym samym wierszu, w którym ją deklaruję. (Przykład kolekcji ciągów IEnumerable)

108

Piszę swój kod testowy i nie chcę pisać:

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

Bardzo chciałbym napisać

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

Jednak {"one", "two", "three"} nie jest "IEnumerable string Collection". Jak mogę zainicjować to w jednym wierszu przy użyciu kolekcji ciągów IEnumerable ”?

Johannes
źródło

Odpowiedzi:

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

Zasadniczo składnia jest następująca:

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

Który jest tłumaczony przez kompilator jako

List<string> list = new List<string>();
list.Add("One");
list.Add("Two");
list.Add("Three");
Matthew Abbott
źródło
Podoba mi się ta metoda bez nawiasów, od jakiej wersji C # to się zaczęło?
SilverbackNet
9
Nie jest to do końca przetłumaczone, przynajmniej nie w ogóle. Przypisanie do zmiennej następuje po wykonaniu wszystkich Addwywołań - to tak, jakby używała zmiennej tymczasowej, z list = tmp;zakończeniem. Może to być ważne, jeśli ponownie przypisujesz wartość zmiennej.
Jon Skeet
Automatyczne właściwości i inicjatory obiektów zostały wprowadzone w .NET 3. Uważam, że jest to ta sama wersja Framework, tylko zaktualizowany kompilator do obsługi LINQ.
Matthew Abbott,
@Jon, Cheers, nigdy nie znałam tej części. : D
Matthew Abbott
@Jon Skeet: "... Może to być ważne, jeśli ponownie przypisujesz wartość zmiennej." czy możesz wyjaśnić trochę więcej w tej uwadze?
Tony
17

Zmień kod na

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

lub

List<string> nameslist = new List<string>(new[] {"one", "two", "three"});
Adriaan Stander
źródło
jaki jest cel używania drugiej linii "List <string> nameslist = new List <string> (new [] {" one "," two "," three "});" kiedy możemy tego użyć? Jakie jest także znaczenie słowa „nowe [] {...}” w drugiej składni? Dlaczego słowo kluczowe new jest używane razem z nawiasami [] ???
Tony
6

Po prostu zgub nawias:

var nameslist = new List<string> { "one", "two", "three" };
Richard Fawcett
źródło
Ups, wygląda na to, że pięć osób mnie pobiło.
Richard Fawcett,
3
List<string> nameslist = new List<string> {"one", "two", "three"} ?
Romain Meresse
źródło
3

Usuń nawiasy:

List<string> nameslist = new List<string> {"one", "two", "three"};
Tim Robinson
źródło
3

To zależy od używanej wersji C #, od wersji 3.0 możesz używać ...

List<string> nameslist = new List<string> { "one", "two", "three" };
Sam Salisbury
źródło
1

Myślę, że to zadziała dla wartości int, long i string.

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


var animals = new List<string>() { "bird", "dog" };
Muhammad Awais
źródło
1

To jest jeden sposób.

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

To jest inny sposób.

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

list2.Add(1);

list2.Add(2);

To samo dotyczy sznurków.

Na przykład:

List<string> list3 = new List<string> { "Hello", "World" };
Min
źródło