params
参数修饰符为调用者提供了一种将多个参数传递给方法的快捷语法。有两种使用
params
参数的方法:
1) 使用参数类型的数组进行调用,在这种情况下,
params
关键字没有作用,而数组直接传递给方法:
object[] array = new[] { "1", "2" };
// Foo receives the 'array' argument directly.
Foo( array );
2) 或者,如果使用了扩展参数列表,则编译器会自动将参数列表包装在临时数组中并将其传递给方法:
Foo( "1", "2" );
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 ) {
}
}
...
Foo( new[] { "1", "2" }, new[] { "3", "4" } );
object[][] arrays = new[] {
new[] { "1", "2" },
new[] { "3", "4" }
};
Foo( arrays );
编辑: 雷蒙德·陈在 一篇新文章 中描述了这种行为及其与C#规范的关系。