パラメーター修飾子は、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)または、 Adamobject
が述べたように、引数を にキャストします。この場合、コンパイラはラッパー配列を作成します。
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# 仕様とどのように関連しているかについて、新しい投稿で説明しています。