web-dev-qa-db-ja.com

C#は可変数の引数をサポートしていますか?

C#は可変数の引数をサポートしていますか?

はいの場合、C#はどのように変数の引数をサポートしませんか?

例は何ですか?

変数引数はどのように役立ちますか?

編集1:その制限は何ですか?

編集2:質問はオプションのパラメーターではなく、可変パラメーターに関するものです

45

はい。古典的な例はparams object[] args

//Allows to pass in any number and types of parameters
public static void Program(params object[] args)

典型的なユースケースは、コマンドライン環境のパラメータをプログラムに渡し、そこでパラメータを文字列として渡します。その後、プログラムはそれらを正しく検証して割り当てる必要があります。

制限:

  • メソッドごとに許可されるparamsキーワードは1つだけです
  • 最後のパラメーターである必要があります。

編集:あなたの編集を読んだ後、私は私のものを作りました。以下の部分では、可変数の引数を取得する方法も取り上げていますが、paramsの方法を本当に探していたと思います。


また、より古典的なものの1つは、method overloadingと呼ばれます。あなたはおそらくそれらをすでに多く使用しているでしょう:

//both methods have the same name and depending on wether you pass in a parameter
//or not, the first or the second is used.
public static void SayHello() {
    Console.WriteLine("Hello");
}
public static void SayHello(string message) {
    Console.WriteLine(message);
}

最後になりましたが、最も既存のもの:オプションの引数

//this time we specify a default value for the parameter message
//you now can call both, the method with parameter and the method without.
public static void SayHello(string message = "Hello") {
    Console.WriteLine(message);
}

http://msdn.Microsoft.com/en-us/library/dd264739.aspx

70
hotS85

C#は、paramsキーワードを使用して可変長パラメーター配列をサポートします。

以下に例を示します。

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

より多くの情報があります こちら

15
recursive

はい、 params

public void SomeMethod(params object[] args)

paramsは最後の引数である必要があり、どのタイプでもかまいません。配列である必要があるのか​​、IEnumerableであるのかがわかりません。

11
Michael Stum

メソッドパラメーターの可変数 を意味すると仮定します。その場合:

void DoSomething(params double[] parms)

(または固定パラメーターと混合)

void DoSomething(string param1, int param2, params double[] otherParams)

制限事項:

  • 配列についても同様に、それらはすべて同じ型(または子型)でなければなりません
  • メソッドごとに1つしか存在できません
  • パラメータリストの最後に来る必要があります

他の人もいるかもしれませんが、現時点ではそれだけです。詳細については、ドキュメントを確認してください。

7
M.Babcock