¿Cómo puedo inicializar una lista de C # en la misma línea que la declaro? (Ejemplo de colección de cadenas IEnumerable)

107

Estoy escribiendo mi código de prueba y no quiero escribir:

List<string> nameslist = new List<string>();
nameslist.Add("one");
nameslist.Add("two");
nameslist.Add("three");

Me encantaría escribir

List<string> nameslist = new List<string>({"one", "two", "three"});

Sin embargo, {"uno", "dos", "tres"} no es una "Colección de cadenas IEnumerable". ¿Cómo puedo inicializar esto en una línea usando la colección de cadenas IEnumerable "?

Johannes
fuente

Respuestas:

168
var list = new List<string> { "One", "Two", "Three" };

Básicamente, la sintaxis es:

new List<Type> { Instance1, Instance2, Instance3 };

Que es traducido por el compilador como

List<string> list = new List<string>();
list.Add("One");
list.Add("Two");
list.Add("Three");
Matthew Abbott
fuente
Me gusta este método sin paréntesis, ¿con qué versión de c # comenzó?
SilverbackNet
9
No se traduce del todo en eso, al menos no en general. La asignación a la variable ocurre después de queAdd se han realizado todas las llamadas, es como si usara una variable temporal, con list = tmp;al final. Esto puede ser importante si reasigna el valor de una variable.
Jon Skeet
Las propiedades automáticas y los inicializadores de objetos se introdujeron con .NET 3, creo, es la misma versión de Framework, solo un compilador actualizado para admitir LINQ.
Matthew Abbott
@Jon, salud, nunca supe esa parte. : D
Matthew Abbott
@Jon Skeet: "... Esto puede ser importante si estás reasignando el valor de una variable". ¿Puedes explicar un poco más sobre este comentario?
Tony
17

Cambie el código a

List<string> nameslist = new List<string> {"one", "two", "three"};

o

List<string> nameslist = new List<string>(new[] {"one", "two", "three"});
Adriaan Stander
fuente
¿Cuál es el propósito de usar la segunda línea "Lista <cadena> lista de nombres = nueva Lista <cadena> (nueva [] {" uno "," dos "," tres "});" cuándo podemos usarla? Además, ¿cuál es el significado de "nuevo [] {...}" en la segunda sintaxis? ¿Por qué se usa la palabra clave nueva junto con el paréntesis [] ???
Tony
6

Solo pierde el paréntesis:

var nameslist = new List<string> { "one", "two", "three" };
Richard Fawcett
fuente
Vaya, parece que cinco personas se me adelantaron.
Richard Fawcett
3
List<string> nameslist = new List<string> {"one", "two", "three"} ?
Romain Meresse
fuente
3

Quite los paréntesis:

List<string> nameslist = new List<string> {"one", "two", "three"};
Tim Robinson
fuente
3

Depende de la versión de C # que estés usando, desde la versión 3.0 en adelante puedes usar ...

List<string> nameslist = new List<string> { "one", "two", "three" };
Sam Salisbury
fuente
1

Creo que esto funcionará para valores int, long y string.

List<int> list = new List<int>(new int[]{ 2, 3, 7 });


var animals = new List<string>() { "bird", "dog" };
Muhammad Awais
fuente
0

Esta es una forma.

List<int> list = new List<int>{ 1, 2, 3, 4, 5 };

Esta es otra forma.

List<int> list2 = new List<int>();

list2.Add(1);

list2.Add(2);

Lo mismo ocurre con las cuerdas.

P.ej:

List<string> list3 = new List<string> { "Hello", "World" };
Min
fuente