Javaのvarargパラメータに代わるC#はありますか?


92

私はJavaに取り組み、.Netテクノロジーを初めて使用しました

変数入力パラメーターを受け入れる関数をC#で宣言することは可能ですか?

次のJava構文に似たC#構文はありますか?

void f1(String... a)

2
以下の回答のいずれかあなたの質問に答えた場合、スタックオーバーフローの仕組みは、横にあるチェックマークをクリックして回答を「受け入れる」ことになります。詳細はこちら
TJクラウダー2017

回答:


145

はい、C#には同等のvarargsパラメーターがあります。これらはパラメーター配列と呼ばれ、params修飾子で導入されます

public void Foo(int x, params string[] values)

次に、それを呼び出します:

Foo(10, "hello", "there");

Javaと同様に、このように変化する可能性があるのは最後のパラメーターにすぎません。(Javaと同様に)のパラメーターはparams object[] objects、型の単一の引数がobject[]再度ラップされるかどうかを覚えておく必要があるため、混乱を招きやすいことに注意してください。同様に、null許容型の場合、の単一の引数がnull配列参照または単一の配列要素として扱われるかどうかを覚えておく必要があります。(必要な場合にのみコンパイラーが配列を作成すると思いますが、私はそれを覚える必要がないコードを書く傾向があります。)


+1、(他のほとんどの言語機能と同様に)言及しますが、これは悪用されるべきではありません。
フェデリコベラサテギ2013

15
@HighCore:他のほとんどの言語機能について言及するのであれば、おそらく言及する価値はありません:)
Jon Skeet

2
@hvd:OPは初心者のように思われるので、ここでは名前付き引数、オプションのパラメーターなどについては説明しません。あなたが作ろうとしている点はわかりますが、現時点では光よりも混乱が増えると思います。
Jon Skeet 2013

37

paramsを見てください(C#リファレンス)

paramsキーワードを使用すると、可変数の引数を取るメソッドパラメータを指定できます。

パラメーター宣言で指定されたタイプの引数のコンマ区切りリスト、または指定されたタイプの引数の配列を送信できます。引数を送信することもできません。

メソッド宣言のparamsキーワードの後に​​パラメーターを追加することはできません。メソッド宣言ではparamsキーワードを1つだけ使用できます。

例に示すように、メソッドは次のように宣言されています

public static void UseParams(params int[] list)
{
    for (int i = 0; i < list.Length; i++)
    {
        Console.Write(list[i] + " ");
    }
    Console.WriteLine();
}

として使用

UseParams(1, 2, 3, 4);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.