Jak zainicjować listę ciągów (List <ciąg>) z wieloma wartościami ciągów


358

Jak można zainicjować (za pomocą inicjatora C #) listę ciągów? Próbowałem z poniższym przykładem, ale nie działa.

List<string> optionList = new List<string>
{
    "AdditionalCardPersonAddressType","AutomaticRaiseCreditLimit","CardDeliveryTimeWeekDay"
}();

jest tutaj przykład wielowymiarowej listy w odpowiedzi na to pytanie stackoverflow.com/questions/34473358/…
barlop

Odpowiedzi:


464
List<string> mylist = new List<string>(new string[] { "element1", "element2", "element3" });

149
Nie sądzę, aby istniał dobry powód, aby zainicjować tutaj tablicę ciągów, aby utworzyć ten obiekt. Każdy, kto szuka, skorzystaj z jednej z pozostałych odpowiedzi.
Robert Smith

2
@Unsliced ​​i @Padel mają więcej poprawnych odpowiedzi imo. Nie musisz przekazywać newniczego innego , jeśli zainicjujesz{ }
Don Cheadle

W przypadku C ++ CLI wygląda to tak:Collections::Generic::List<int>^ mylist = gcnew Collections::Generic::List<int>(gcnew array<int>{0, 1, 2, 3, 4})
Rostfrei

@Bobrot dlaczego? ponieważ alokacja new String[]nie jest wydajna?
Dylan Czenski

8
@DylanChensky Powiedziałbym, że robienie czegokolwiek jest niepotrzebne jest nieefektywne. To prawda, że ​​ta jedna instancja może nie być wielkim problemem, ale wyobraź sobie, że twój kod jest zaśmiecony takimi elementami. To może zrobić dużą różnicę, szczególnie jeśli chodzi o wykorzystanie pamięci.
Robert Smith,

556

Po prostu usuń ()na końcu.

List<string> optionList = new List<string>
            { "AdditionalCardPersonAdressType", /* rest of elements */ };

4
@Oded: msdn.microsoft.com/en-us/library/bb384062.aspx „ Inicjatory kolekcji”
Lucero,

Masz na myśli konkretną wersję .NET / C #? O ile wiem, ta praca od wersji 3.5 i późniejszych. Nie wiem o 2.0, ponieważ nie używałem go od
dłuższego

1
asp.net 2.0 btw Dostaję błąd po {-> Error 7 Nowe wyrażenie wymaga () lub [] po typie
Bilgin Kılıç

4
W wersji 2.0 należy użyć go w ten sposób: List<string> optionList = new List<string>() { "AdditionalCardPersonAdressType", /* rest of elements */ };. Zauważ, że ()tutaj: new List<string>().
Padel

3
Jest to funkcja języka C # 3 i nie ma nic wspólnego z używaną wersją frameworka. Jeśli nadal korzystasz z programu Visual Studio 2005, nie będziesz mógł korzystać z tej funkcji.
Phil Gan

145

Naprawdę nie zadałeś pytania, ale kod powinien być

List<string> optionList = new List<string> { "string1", "string2", ..., "stringN"}; 

tzn. brak trailing () po liście.


Błąd 7 Nowe wyrażenie wymaga () lub [] po typie
Bilgin Kılıç

2
@blgnklc, ponieważ używasz C # 2, który nie obsługuje tej funkcji.
Phil Gan

25
var animals = new List<string> { "bird", "dog" };
List<string> animals= new List<string> { "bird", "dog" };

Powyżej dwóch jest najkrótszych sposobów, zobacz https://www.dotnetperls.com/list


1
Czy to jest lepsze niż zaakceptowana odpowiedź? Wydaje się to prostsze, bez potrzeby stosowania półproduktustring[]
Ehtesh Choudhury

var animals = new List<string> { "bird", "dog" };nie zostało zasugerowane w zaakceptowanej odpowiedzi. Dalej (new string[]znajduje się polecenie dodawania w zaakceptowanej odpowiedzi, którego można uniknąć.
Sujoy

14

Twoja funkcja jest w porządku, ale nie działa, ponieważ wstawiasz ()ostatni }. Jeśli przeniesiesz ()na górę tuż oboknew List<string>() błędu, przestaje.

Próbka poniżej:

List<string> optionList = new List<string>()
{
    "AdditionalCardPersonAdressType","AutomaticRaiseCreditLimit","CardDeliveryTimeWeekDay"
};

7

W ten sposób inicjujesz, a także możesz użyć List.Add () na wypadek, gdybyś chciał uczynić go bardziej dynamicznym.

List<string> optionList = new List<string> {"AdditionalCardPersonAdressType"};
optionList.Add("AutomaticRaiseCreditLimit");
optionList.Add("CardDeliveryTimeWeekDay");

W ten sposób, jeśli pobierasz wartości z IO, możesz dodać je do dynamicznie przydzielanej listy.


2

Przesuwaj okrągłe nawiasy w następujący sposób:

var optionList = new List<string>(){"AdditionalCardPersonAdressType","AutomaticRaiseCreditLimit","CardDeliveryTimeWeekDay"};

0

Jedną naprawdę fajną funkcją jest to, że inicjator listy działa również dobrze z klasami niestandardowymi: wystarczy zaimplementować interfejs IEnumerable i zastosować metodę o nazwie Add .

Na przykład, jeśli masz taką klasę niestandardową:

class MyCustomCollection : System.Collections.IEnumerable
{
    List<string> _items = new List<string>();

    public void Add(string item)
    {
        _items.Add(item);
    }

    public IEnumerator GetEnumerator()
    {
        return _items.GetEnumerator();
    }
}

to zadziała:

var myTestCollection = new MyCustomCollection()
{
    "item1",
    "item2"
}

-1
List<string> animals= new List<string>();
animals.Add("dog");
animals.Add("tiger");

3
Proszę dodać jakieś wytłumaczenie na odpowiedź
mechnicov

Przepraszamy, ale pytanie dotyczy zainicjowania listy z wieloma wartościami. To inicjuje ciąg, a następnie dodaje wartości, a nie ten sam przypadek.
c-chavez

-8

Tak byś to zrobił.

List <string> list1 = new List <string>();

Nie zapomnij dodać

using System.Collections.Generic;

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.