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

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

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 */ };

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.


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


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

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.


2

Bewegen Sie runde Klammern wie folgt:

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

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

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

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;

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.