Pregunta

¿Por qué recibo un error en la siguiente declaración?

List<int> intrs = new List<int>().AddRange(new int[]{1,2,3,45});

Error: ¿No se puede convertir el tipo void a Lista?

¿Fue útil?

Solución

AddRange función no devuelve un valor. Puede que sea necesario para llevar a cabo esto en dos pasos:

List<int> intrs = new List<int>();
intrs.AddRange(new int[]{1,2,3,45});

Otros consejos

También es posible usar un inicializador de colección (suponiendo que C # 3.0 +).

List<int> intrs = new List<int> { 1, 2, 3, 45 };

Editar por 280Z28: Esto funciona para cualquier cosa con un método Add. El paréntesis constructor son opcionales - si desea pasar algo a un constructor tales como la capacidad, puede hacerlo con List<int>(capacity) en lugar de sólo List<int> escrito arriba

.

Aquí hay una referencia de MSDN para obtener información sobre la de objetos y Colección Inicializadores .

Dictionary<string, string> map = new Dictionary<string, string>()
    {
        { "a", "first" },
        { "b", "second" }
    };

AddRange modifica la lista especificada en lugar de devolver un nuevo una lista con los elementos agregados. Para indicar esto, devuelve void.

Prueba esto:

List<int> intrs = new List<int>();
intrs.AddRange(new int[]{1,2,3,45});

Si desea crear una nueva lista sin modificar la lista original, puede utilizar LINQ :

List<int> intrs = new List<int>();
List<int> newIntrs = intrs.Union(new int[]{1,2,3,45}).ToList();
// intrs is unchanged

AddRange no devuelve la lista se ha añadido artículos a (a diferencia de StringBuilder). Que tiene que hacer algo como esto:

List<int> intrs = new List<int>();
intrs.AddRange(new int[]{1,2,3,45});

AddRange () se declara como:

public void AddRange(object[]);

No devuelve la lista.

Por cierto en C # 3.x (no estoy seguro alrededor de 2,0) que puede hacer cualquiera de

List<int> intrs = new List<int>{1,2,3,45};
List<int> intrs = new []{1,2,3,45}.ToList(); // with Linq extensions

Además de otras respuestas, usted puede añadir su propio método de extensión que agregará gama y la lista de retorno (no que es una buena práctica).

Por cierto, si ya había declarado intrs, se podría haber hecho con paréntesis:

(intrs = new List<int>()).AddRange(new int[] { 1, 2, 3, 45 });

Sin embargo, me gusta la sintaxis de inicialización mejor.

A pesar de que otros ya han mencionado que AddRange no devuelve un valor, en base a las muestras dadas de alternativas que también hay que recordar que el constructor de la lista tendrá un IEnumerable de T, así, además del código anteriormente mencionado que es .NET 3.5 +

Por ejemplo:

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

Hay otra manera.

List<int> intrs =  new List<int>
                        {
                            1,
                            2,
                            3,
                            45
                        };
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top