Le params
modificateur de paramètre donne aux appelants une syntaxe de raccourci pour passer plusieurs arguments à une méthode. Il existe deux façons d'appeler une méthode avec un params
paramètre:
1) Appel avec un tableau du type paramètre, auquel cas le params
mot - clé n'a aucun effet et le tableau est passé directement à la méthode:
object[] array = new[] { "1", "2" };
// Foo receives the 'array' argument directly.
Foo( array );
2) Ou, en appelant avec une liste étendue d'arguments, auquel cas le compilateur encapsulera automatiquement la liste d'arguments dans un tableau temporaire et le passera à la méthode:
// Foo receives a temporary array containing the list of arguments.
Foo( "1", "2" );
// This is equivalent to:
object[] temp = new[] { "1", "2" );
Foo( temp );
Pour passer un tableau d'objets à une méthode avec un params object[]
paramètre " ", vous pouvez soit:
1) Créez un tableau de wrapper manuellement et passez-le directement à la méthode, comme mentionné par lassevk :
Foo( new object[] { array } ); // Equivalent to calling convention 1.
2) Ou, transtypez l'argument en object
, comme mentionné par Adam , auquel cas le compilateur créera le tableau wrapper pour vous:
Foo( (object)array ); // Equivalent to calling convention 2.
Cependant, si le but de la méthode est de traiter plusieurs tableaux d'objets, il peut être plus facile de le déclarer avec un params object[][]
paramètre explicite " ". Cela vous permettrait de passer plusieurs tableaux comme arguments:
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 );
Edit: Raymond Chen décrit ce comportement et comment il se rapporte à la spécification C # dans un nouvel article .