Модификатор параметра 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
, как указано Adam , и в этом случае компилятор создаст для вас массив-оболочку:
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 # в новом посте .