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

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

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

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.


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


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

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.


2

Mueva los corchetes de esta manera:

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

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

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

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;

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.