L' params
paramètre modificateur donne une syntaxe raccourcie pour passer plusieurs arguments pour une méthode. Il y a deux façons d'appeler une méthode avec un params
paramètre:
1) l'Appel avec un tableau du type de paramètre, auquel cas l' params
mot-clé n'a aucun effet et le tableau est transmis directement à la méthode:
object[] array = new[] { "1", "2" };
// Foo receives the 'array' argument directly.
Foo( array );
2) Ou, en l'appelant avec une longue liste d'arguments, dans ce cas le compilateur va automatiquement automatiquement la liste des arguments dans un tableau temporaire et le passer à 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 );
Afin de passer dans un tableau d'objet à une méthode avec un "params object[]
" paramètre, vous pouvez soit:
1) Créer un wrapper tableau manuellement et passer directement à la méthode, comme mentionné par lassevk:
Foo( new object[] { array } ); // Equivalent to calling convention 1.
2) Ou, fonte de l'argument d' object
, comme l'a dit Adam, auquel cas le compilateur va créer de l'emballage du tableau pour vous:
Foo( (object)array ); // Equivalent to calling convention 2.
Toutefois, si l'objectif de la méthode est le processus de plusieurs tableaux d'objets, il peut être plus facile de le déclarer explicitement avec un "params object[][]
" paramètre. Cela vous permettra 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 nouveau post.