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 # в новом посте .