El params
modificador de parámetros proporciona a los llamantes una sintaxis de acceso directo para pasar múltiples argumentos a un método. Hay dos formas de llamar a un método con un params
parámetro:
1) Llamar con una matriz del tipo de parámetro, en cuyo caso la params
palabra clave no tiene efecto y la matriz se pasa directamente al método:
object[] array = new[] { "1", "2" };
// Foo receives the 'array' argument directly.
Foo( array );
2) O, llamando con una lista extendida de argumentos, en cuyo caso el compilador ajustará automáticamente la lista de argumentos en una matriz temporal y la pasará al método:
// Foo receives a temporary array containing the list of arguments.
Foo( "1", "2" );
// This is equivalent to:
object[] temp = new[] { "1", "2" );
Foo( temp );
Para pasar una matriz de objetos a un método con un params object[]
parámetro " ", puede:
1) Cree una matriz de contenedor manualmente y páselo directamente al método, como lo menciona lassevk :
Foo( new object[] { array } ); // Equivalent to calling convention 1.
2) O bien, eche el argumento a object
, como lo mencionó Adam , en cuyo caso el compilador creará la matriz de envoltura para usted:
Foo( (object)array ); // Equivalent to calling convention 2.
Sin embargo, si el objetivo del método es procesar múltiples matrices de objetos, puede ser más fácil declararlo con un " params object[][]
" parámetro explícito . Esto le permitiría pasar múltiples matrices como argumentos:
void Foo( params object[][] arrays ) {
foreach( object[] array in arrays ) {
// process array
}
}
...
Foo( new[] { "1", "2" }, new[] { "3", "4" } );
// Equivalent to:
object[][] arrays = new[] {
new[] { "1", "2" },
new[] { "3", "4" }
};
Foo( arrays );
Editar: Raymond Chen describe este comportamiento y cómo se relaciona con la especificación C # en una nueva publicación .