So initialisieren Sie eine Liste von Zeichenfolgen (List <string>) mit vielen Zeichenfolgenwerten

358

Wie ist es möglich (mit einem C # -Initialisierer) eine Liste von Zeichenfolgen zu initialisieren? Ich habe es mit dem folgenden Beispiel versucht, aber es funktioniert nicht.

List<string> optionList = new List<string>
{
    "AdditionalCardPersonAddressType","AutomaticRaiseCreditLimit","CardDeliveryTimeWeekDay"
}();
Bilgin Kılıç
quelle
Es gibt hier ein Beispiel für eine mehrdimensionale Liste in der Antwort auf diese Frage stackoverflow.com/questions/34473358/…
Barlop

Antworten:

464
List<string> mylist = new List<string>(new string[] { "element1", "element2", "element3" });
Zenzer
quelle
149
Ich glaube nicht, dass es einen guten Grund gibt, hier ein String-Array zu initialisieren, um dieses Objekt zu erstellen. Wer sucht, benutzt bitte eine der anderen Antworten.
Robert Smith
2
@Unsliced ​​und @Padel haben imo korrektere Antworten. Sie müssen newnichts weitergeben, wenn Sie mit{ }
Don Cheadle
Für C ++ CLI ist es wie:Collections::Generic::List<int>^ mylist = gcnew Collections::Generic::List<int>(gcnew array<int>{0, 1, 2, 3, 4})
Rostfrei
@ Bobrot warum? weil die Zuweisung von a new String[]nicht effizient ist?
Dylan Czenski
8
@ DylanChensky Ich würde in der Regel sagen, dass es ineffizient ist, alles Unnötige zu tun. Zugegeben, diese eine Instanz ist vielleicht keine große Sache, aber stellen Sie sich vor, Ihr Code ist mit solchen Elementen übersät. Dies könnte insgesamt einen großen Unterschied machen, insbesondere wenn es um die Speichernutzung geht.
Robert Smith
556

Einfach ()am Ende entfernen .

List<string> optionList = new List<string>
            { "AdditionalCardPersonAdressType", /* rest of elements */ };
Padel
quelle
4
@Oded: msdn.microsoft.com/en-us/library/bb384062.aspx "Collection initializers"
Lucero
Beziehen Sie sich auf eine bestimmte Version von .NET / C #? Soweit ich weiß, funktioniert diese Arbeit ab Version 3.5. Ich weiß nichts über 2.0, weil ich es eine Weile nicht benutzt habe ...
Padel
1
asp.net 2.0 Übrigens bekomme ich den Fehler nach {-> Fehler 7 Ein neuer Ausdruck erfordert () oder [] nach Typ
Bilgin Kılıç
4
In 2.0 müssen Sie es wie folgt verwenden : List<string> optionList = new List<string>() { "AdditionalCardPersonAdressType", /* rest of elements */ };. Beachten Sie das ()hier : new List<string>().
Padel
3
Es ist eine C # 3-Sprachfunktion und hat nichts mit der Version des von Ihnen verwendeten Frameworks zu tun. Wenn Sie Visual Studio 2005 noch verwenden, können Sie diese Funktion nicht verwenden.
Phil Gan
145

Sie haben nicht wirklich eine Frage gestellt, aber der Code sollte sein

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

dh kein nachgestelltes () nach der Liste.

Ungeschnitten
quelle
Fehler 7 Ein neuer Ausdruck erfordert () oder [] nach Typ
Bilgin Kılıç
2
@blgnklc, weil Sie C # 2 verwenden, das diese Funktion nicht unterstützt.
Phil Gan
25
var animals = new List<string> { "bird", "dog" };
List<string> animals= new List<string> { "bird", "dog" };

Die beiden oben genannten Wege sind die kürzesten, siehe https://www.dotnetperls.com/list

Sujoy
quelle
1
Ist dies der akzeptierten Antwort vorzuziehen? Es scheint einfacher zu sein, ohne dass ein Zwischenprodukt string[]
erforderlich ist
var animals = new List<string> { "bird", "dog" };wurde in der akzeptierten Antwort nicht vorgeschlagen. Ferner (new string[]ist ein Additionsbefehl in der akzeptierten Antwort enthalten, der vermieden werden kann.
Sujoy
14

Ihre Funktion ist in Ordnung, funktioniert aber nicht, weil Sie die ()nach der letzten setzen }. Wenn Sie die ()nach oben direkt neben bewegennew List<string>() stoppt der Fehler dem Fehler.

Beispiel unten:

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

Auf diese Weise initialisieren Sie und können List.Add () verwenden, falls Sie es dynamischer gestalten möchten.

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

Auf diese Weise können Sie Werte, die Sie von IO übernehmen, einer dynamisch zugewiesenen Liste hinzufügen.

Enye Aaron Shi
quelle
2

Bewegen Sie runde Klammern wie folgt:

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

Eine wirklich coole Funktion ist, dass der Listeninitialisierer auch mit benutzerdefinierten Klassen gut funktioniert: Sie müssen nur die IEnumerable- Schnittstelle implementieren und eine Methode namens Hinzufügen haben .

Wenn Sie beispielsweise eine benutzerdefinierte Klasse wie diese haben:

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

das wird funktionieren:

var myTestCollection = new MyCustomCollection()
{
    "item1",
    "item2"
}
Adospace
quelle
-1
List<string> animals= new List<string>();
animals.Add("dog");
animals.Add("tiger");
Raj
quelle
3
Bitte fügen Sie eine Erklärung zu Ihrer Antwort hinzu
mechnicov
Entschuldigung, aber die Frage betrifft das Initialisieren einer Liste mit mehreren Werten. Dies initialisiert die Zeichenfolge und fügt dann die Werte hinzu, nicht im gleichen Fall.
c-chavez
-8

So würden Sie es machen.

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

Vergessen Sie nicht hinzuzufügen

using System.Collections.Generic;

Muhammad Ali
quelle