params
Модифікатор параметра дає звонящему ярлик синтаксис для передачі кілька аргументів для методу. Існує два способи викликати метод із params
параметром:
1) Виклик з масиву типу параметра, і в цьому випадку params
ключове слово не має ефекту, і масив передається безпосередньо методу:
object[] array = new[] { "1", "2" };
// Foo receives the 'array' argument directly.
Foo( array );
2) Або, зателефонувавши з розширеним списком аргументів, у цьому випадку компілятор автоматично перегорне список аргументів у тимчасовий масив і передасть його методу:
// Foo receives a temporary array containing the list of arguments.
Foo( "1", "2" );
// This is equivalent to:
object[] temp = new[] { "1", "2" );
Foo( temp );
Щоб передати об’єктний масив методу з params object[]
параметром " ", ви можете:
1) Створіть масив обгортки вручну та передайте його безпосередньо методу, як згадував lassevk :
Foo( new object[] { array } ); // Equivalent to calling convention 1.
2) Або наведіть аргумент на те object
, як згадував Адам , і тоді компілятор створить для вас масив обгортки:
Foo( (object)array ); // Equivalent to calling convention 2.
Однак якщо мета методу полягає в обробці декількох масивів об'єктів, можливо, простіше оголосити його явним params object[][]
параметром " ". Це дозволить вам передавати кілька масивів як аргументи:
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 );
Редагувати: Реймонд Чен описує таку поведінку та як вона стосується специфікації C # у новій публікації .