parameter array c# parameters params

c# - array - ¿Son posibles múltiples parámetros "params"?



params object[] parameters c# (7)

Desde MSDN - params

No se permiten parámetros adicionales después de la palabra clave params en una declaración de método, y solo se permite una palabra clave params en una declaración de método.

¿Es posible tener múltiples parámetros de parámetros en C #? Algo como esto:

void foobar(params int[] foo, params string[] bar)

Pero no estoy seguro de si eso es posible. Si es así, ¿cómo decidiría el compilador dónde dividir los argumentos?



No esto no es posible. Toma esto:

void Mult(params int[] arg1, params long[] arg2)

¿Cómo se supone que el compilador interpreta esto?

Mult(1, 2, 3);

Podría leerse como cualquiera de estos:

Mult(new int[] { }, new long[] { 1, 2, 3 }); Mult(new int[] { 1 }, new long[] { 2, 3 }); Mult(new int[] { 1, 2 }, new long[] { 3 }); Mult(new int[] { 1, 2, 3 }, new long[] { });

Sin embargo, puedes tomar dos matrices como parámetros como este:

void Mult(int[] arg1, params long[] arg2)


No, solo se permite un único parámetro e incluso ese debe ser el último argumento. Lee esto

Esto funcionara

public void Correct(int i, params string[] parg) { ... }

Pero esto no funcionará

public void Correct(params string[] parg, int i) { ... }


Sé que este es un post muy viejo, pero aquí:

En C # 7, realmente puedes. Puedes usar System.ValueTuple para hacer esto:

private void Foorbar(params (int Foo, string Bar)[] foobars) { foreach (var foobar in foobars) Console.WriteLine($"foo: {foobar.Foo}, bar: {foobar.Bar}"); }

Y luego puedes usarlo así:

private void Main() => Foobar((3, "oo"), (6, "bar"), (7, baz));

Y la salida obvia:

Foo: 3, Bar: foo Foo: 6, Bar: bar Foo: 7, Bar: baz

El único inconveniente es que tienes que hacer esto: foobars[0].foo; en lugar de foos[0]; , pero eso es realmente un pequeño problema minúsculo Además, si realmente quisieras, podrías hacer alguna extensión o función para convertirlos en arreglos, aunque no creo que realmente valga la pena.


Solo puedes tener un argumento params. Puede tener dos argumentos de matriz y la persona que llama puede usar inicializadores de matriz para llamar a su método, pero solo puede haber un argumento de parámetros.

void foobar(int[] foo, string[] bar) ... foobar(new {1, 2,3}, new {"a", "b", "c"});


void useMultipleParams(int[] foo, string[] bar) { } useMultipleParams(new int[]{1,2}, new string[] {"1","2"})