paramsModyfikujący parametr podaje rozmówcy na składnie skrótów dla przekazywania wielu argumentów metody. Istnieją dwa sposoby wywołania metody z paramsparametrem:
1) Wywołanie z tablicą typu parametru, w którym to przypadku paramssłowo kluczowe nie działa i tablica jest przekazywana bezpośrednio do metody:
object[] array = new[] { "1", "2" };
// Foo receives the 'array' argument directly.
Foo( array );
2) Lub wywołanie z rozszerzoną listą argumentów, w którym to przypadku kompilator automatycznie zawinie listę argumentów w tymczasowej tablicy i przekaże ją do metody:
// Foo receives a temporary array containing the list of arguments.
Foo( "1", "2" );
// This is equivalent to:
object[] temp = new[] { "1", "2" );
Foo( temp );
Aby przekazać tablicę obiektów do metody z params object[]parametrem „ ”, możesz:
1) Utwórz ręcznie tablicę opakowującą i przekaż ją bezpośrednio do metody, jak wspomniał lassevk :
Foo( new object[] { array } ); // Equivalent to calling convention 1.
2) Lub przerzuć argument na object, jak wspomniał Adam , w takim przypadku kompilator utworzy tablicę opakowującą:
Foo( (object)array ); // Equivalent to calling convention 2.
Jeśli jednak celem metody jest przetwarzanie wielu tablic obiektów, może być łatwiej zadeklarować ją z jawnym params object[][]parametrem " ". Umożliwiłoby to przekazanie wielu tablic jako argumentów:
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 );
Edycja: Raymond Chen opisuje to zachowanie i jego związek ze specyfikacją C # w nowym poście .