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 es posible. Podría ser solo una palabra clave params por declaración de método - desde MSDN - http://msdn.microsoft.com/en-us/library/w5zay9db(v=vs.71).aspx
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"})