该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 );
编辑: Raymond Chen在新文章中描述了此行为及其与C#规范的关系。