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

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

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

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




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

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

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" };
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.