Come inizializzare un elenco di stringhe (Elenco <stringa>) con molti valori di stringa


358

Come è possibile inizializzare (con un inizializzatore C #) un elenco di stringhe? Ho provato con l'esempio qui sotto ma non funziona.

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

c'è un esempio qui per una lista multidimensionale nella risposta a questa domanda stackoverflow.com/questions/34473358/...
barlop

Risposte:


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

150
Non credo che ci sia una buona ragione per inizializzare un array di stringhe qui per creare questo oggetto. Chiunque stia cercando, utilizza una delle altre risposte.
Robert Smith,

2
@Unsliced ​​e @Padel hanno più risposte corrette imo. Non è necessario passare a newnessun altro se si esegue l'inizializzazione con{ }
Don Cheadle

Per CLI C ++ è come:Collections::Generic::List<int>^ mylist = gcnew Collections::Generic::List<int>(gcnew array<int>{0, 1, 2, 3, 4})
Rostfrei,

@Bobrot perché? perché l'allocazione di a new String[]non è efficiente?
Dylan Czenski,

8
@DylanChensky Direi come regola generale, fare qualcosa di inutile è inefficiente. Certo, questa istanza potrebbe non essere un grosso problema, ma immagina se il tuo codice è disseminato di elementi come questo. Potrebbe fare una grande differenza nel complesso, soprattutto quando si tratta dell'utilizzo della memoria.
Robert Smith,

557

Basta rimuovere ()alla fine.

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

4
@Oded: msdn.microsoft.com/en-us/library/bb384062.aspx "initializers Collection"
Lucero

Ti riferisci a una versione specifica di .NET / C #? Per quanto ne so questo lavoro dalla v3.5 e successive. Non conosco 2.0 perché non lo uso da un po 'di tempo ...
Padel,

1
asp.net 2.0 tra parentesi ottengo l'errore dopo {-> errore 7 Una nuova espressione richiede () o [] dopo il tipo
Bilgin Kılıç

4
In 2.0 è necessario utilizzare in questo modo: List<string> optionList = new List<string>() { "AdditionalCardPersonAdressType", /* rest of elements */ };. Si noti il ()qui: new List<string>().
Padel,

3
È una funzionalità del linguaggio C # 3 e non ha nulla a che fare con la versione del framework in uso. Se stai ancora utilizzando Visual Studio 2005 non sarai in grado di utilizzare questa funzionalità.
Phil Gan,

145

Non hai davvero fatto una domanda, ma il codice dovrebbe essere

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

cioè nessun trailing () dopo l'elenco.


Errore 7 Una nuova espressione richiede () o [] dopo il tipo
Bilgin Kılıç

2
@blgnklc, perché stai usando C # 2 che non supporta questa funzionalità.
Phil Gan,

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

Sopra due sono i modi più brevi, consultare https://www.dotnetperls.com/list


1
È preferibile rispetto alla risposta accettata? Sembra più semplice, senza bisogno di un intermediostring[]
Ehtesh Choudhury,

var animals = new List<string> { "bird", "dog" };non è stato suggerito nella risposta accettata. Ulteriore (new string[]è un comando di aggiunta nella risposta accettata che può essere evitato.
Sujoy

14

La tua funzione è perfetta ma non funziona perché hai inserito ()l'ultimo }. Se si sposta ()in alto proprio accanto new List<string>()all'errore si interrompe.

Esempio sotto:

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

7

Ecco come inizializzare e anche puoi usare List.Add () nel caso tu voglia renderlo più dinamico.

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

In questo modo, se si stanno acquisendo valori da IO, è possibile aggiungerlo a un elenco allocato dinamicamente.


2

Sposta le parentesi tonde in questo modo:

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

0

Una caratteristica davvero interessante è che l'inizializzatore di elenchi funziona perfettamente anche con le classi personalizzate: devi solo implementare l' interfaccia IEnumerable e avere un metodo chiamato Aggiungi .

Ad esempio, se hai una classe personalizzata come questa:

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

questo funzionerà:

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

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

3
Per favore, aggiungi qualche spiegazione alla tua risposta
mechnicov

Siamo spiacenti, ma la domanda riguarda l'inizializzazione di un elenco con più valori. Questo inizializza la stringa e POI aggiunge i valori, non lo stesso caso.
C-Chavez,

-8

Ecco come lo faresti.

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

Non dimenticare di aggiungere

using System.Collections.Generic;

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.