web-dev-qa-db-ja.com

複数のオプションパラメータをC#関数に渡す

任意の数のパラメーターを受け入れるようにC#関数を設定する方法はありますか?たとえば、次のすべてが機能するように機能を設定できますか?

x = AddUp(2, 3)

x = AddUp(5, 7, 8, 2)

x = AddUp(43, 545, 23, 656, 23, 64, 234, 44)
60
Craig Schwarze

パラメータ配列params修飾子とともに使用します。

public static int AddUp(params int[] values)
{
    int sum = 0;
    foreach (int value in values)
    {
        sum += value;
    }
    return sum;
}

少なくともone value(空の配列ではなく)があることを確認したい場合は、個別に指定します。

public static int AddUp(int firstValue, params int[] values)

(実装で開始するsumfirstValueに設定します。)

また、通常の方法で配列参照のnullityを確認する必要があることに注意してください。メソッド内では、パラメーターは完全に普通の配列です。パラメータ配列修飾子は、callメソッドの場合にのみ違いをもたらします。基本的に、コンパイラは次のことを行います。

int x = AddUp(4, 5, 6);

次のようなものに:

int[] tmp = new int[] { 4, 5, 6 };
int x = AddUp(tmp);

あなたはcan完全に通常の配列で呼び出します-したがって、後者の構文はソースコードでも有効です。

139
Jon Skeet

C#4.0はオプションのパラメーターもサポートしています。これは、他の状況で役立つ場合があります。 this の記事を参照してください。

5
Tarydon

1.オーバーロード関数を作成できます。

SomeF(strin s){}   
SomeF(string s, string s2){}    
SomeF(string s1, string s2, string s3){}   

詳細: http://csharpindepth.com/Articles/General/Overloading.aspx

2.または、paramsを使用して1つの関数を作成できます

SomeF( params string[] paramArray){}
SomeF("aa","bb", "cc", "dd", "ff"); // pass as many as you like

詳細: https://docs.Microsoft.com/en-us/dotnet/csharp/language-reference/keywords/params

3.または単純な配列を使用できます

Main(string[] args){}
0
Pit J