params
パラメータ修飾子は、発信者にメソッドに複数の引数を渡すためのショートカット構文を提供します。params
パラメータを使用してメソッドを呼び出す方法は2つあります。
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)または、Adamが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#仕様との関係について、新しい投稿で説明しています。