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.