Cómo inicializar una lista de cadenas (List <string>) con muchos valores de cadena

358

¿Cómo es posible inicializar (con un inicializador de C #) una lista de cadenas? He intentado con el siguiente ejemplo pero no funciona.

List<string> optionList = new List<string>
{
    "AdditionalCardPersonAddressType","AutomaticRaiseCreditLimit","CardDeliveryTimeWeekDay"
}();
Bilgin Kılıç
fuente
Hay un ejemplo aquí para una lista multidimensional en la respuesta a esta pregunta stackoverflow.com/questions/34473358/…
barlop

Respuestas:

464
List<string> mylist = new List<string>(new string[] { "element1", "element2", "element3" });
Zenzer
fuente
150
No creo que haya una buena razón para inicializar una matriz de cadenas aquí para crear este objeto. Cualquiera que esté buscando, utilice una de las otras respuestas.
Robert Smith
2
@Unsliced ​​y @Padel tienen más respuestas correctas imo. No es necesario pasar otra newcosa si inicializa con{ }
Don Cheadle
Para C ++ CLI es como:Collections::Generic::List<int>^ mylist = gcnew Collections::Generic::List<int>(gcnew array<int>{0, 1, 2, 3, 4})
Rostfrei
@Bobrot por qué? porque asignar a new String[]no es eficiente?
Dylan Czenski
8
@DylanChensky Diría que, como regla general, hacer cualquier cosa innecesaria es ineficiente. De acuerdo, esta instancia podría no ser un gran problema, pero imagina si tu código está lleno de elementos como este. En general, podría marcar una gran diferencia, especialmente cuando se trata del uso de la memoria.
Robert Smith
557

Simplemente elimine ()al final.

List<string> optionList = new List<string>
            { "AdditionalCardPersonAdressType", /* rest of elements */ };
Padel
fuente
44
@Oded: msdn.microsoft.com/en-us/library/bb384062.aspx "Inicializadores de la colección"
Lucero
¿Se refiere a una versión específica de .NET / C #? Por lo que sé, este trabajo es de v3.5 y posterior. No sé sobre 2.0 porque no lo he usado en mucho tiempo ...
Padel
1
asp.net 2.0 por cierto me sale el error después de {-> Error 7 Una nueva expresión requiere () o [] después del tipo
Bilgin Kılıç
44
En 2.0 se debe utilizar de esta manera: List<string> optionList = new List<string>() { "AdditionalCardPersonAdressType", /* rest of elements */ };. Tenga en cuenta la ()aquí: new List<string>().
Padel
3
Es una característica del lenguaje C # 3 y no tiene nada que ver con la versión del marco que está utilizando. Si todavía usa Visual Studio 2005, no podrá usar esta función.
Phil Gan
145

Realmente no has hecho una pregunta, pero el código debería ser

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

es decir, sin seguimiento () después de la lista.

Sin cortar
fuente
Error 7 Una nueva expresión requiere () o [] después del tipo
Bilgin Kılıç
2
@blgnklc, porque estás usando C # 2 que no admite esta función.
Phil Gan
25
var animals = new List<string> { "bird", "dog" };
List<string> animals= new List<string> { "bird", "dog" };

Las anteriores son las dos formas más cortas, consulte https://www.dotnetperls.com/list

Sujoy
fuente
1
¿Se prefiere esto a la respuesta aceptada? Parece más simple, sin necesidad de un intermediariostring[]
Ehtesh Choudhury
var animals = new List<string> { "bird", "dog" };no fue sugerido en la respuesta aceptada. Además (new string[]hay un comando adicional en la respuesta aceptada que se puede evitar.
Disfruta
14

Tu función está bien pero no funciona porque pones ()el último }. Si mueve el ()a la parte superior justo al lado denew List<string>() del error, se detiene.

Muestra a continuación:

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

Así es como se inicializa y también puede usar List.Add () en caso de que quiera hacerlo más dinámico.

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

De esta manera, si está tomando valores de IO, puede agregarlo a una lista asignada dinámicamente.

Enye Aaron Shi
fuente
2

Mueva los corchetes de esta manera:

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

Una característica realmente genial es que el inicializador de listas también funciona bien con clases personalizadas: solo tiene que implementar la interfaz IEnumerable y tener un método llamado Agregar .

Entonces, por ejemplo, si tiene una clase personalizada como esta:

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

esto funcionará:

var myTestCollection = new MyCustomCollection()
{
    "item1",
    "item2"
}
adospace
fuente
-1
List<string> animals= new List<string>();
animals.Add("dog");
animals.Add("tiger");
raj
fuente
3
Por favor, añadir alguna explicación a su respuesta
mechnicov
Lo sentimos, pero la pregunta es sobre la inicialización de una lista con múltiples valores. Esto inicializa la cadena y ENTONCES agrega los valores, no el mismo caso.
c-chavez
-8

Así es como lo harías.

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

No te olvides de agregar

using System.Collections.Generic;

Muhammad Ali
fuente