佐々木屋

技術的なことから趣味まで色々書きます

可変長引数①

ちょっと難しい言葉ですが、要はメソッドに渡せる引数の数が可変ということです。

例えば以下のような同じ種の引数を複数必要とするメソッドを考えます。単純に引数を足す処理です。
引数は配列となっているので、当然メンバー変数を一旦配列に変換して引数に渡す必要があります。

private void TotalSum1(int[] values) {
    int res = 0;
    foreach(int v in values) {
        res += v;
    }
    Console.WriteLine(res);
}

public static void Main() {
    int a = 1;
    int b = 3;
    int c = 5;
    int d = 7;

    int[] values = { a, b, c, d};
    TotalSum1(values);
}
Private Sub TotalSum1(ByVal values As Integer())
    Dim res As Integer = 0
    For Each v As Integer In values
        res += v
    Next
    Console.WriteLine(res)
End Sub

Public Sub Main()
    Dim a As Integer = 1
    Dim b As Integer = 3
    Dim c As Integer = 5
    Dim d As Integer = 7

    Dim values As Integer() = {a, b, c, d}
    TotalSum1(values)
End Sub

これを可変長引数にすると、呼び出し元で配列に変換する必要が無くなります。
C#はparamsキーワードを利用します。

private void TotalSum2(params int[] values) {
    int res = 0;
    foreach (int v in values) {
        res += v;
    }
    Console.WriteLine(res);
}

public static void Main() {
    TotalSum2(a, b, c, d);
}

VB.NETはByValの代わりにParamArrayキーワードを指定します。

Private Sub TotalSum2(ParamArray values As Integer())
    Dim res As Integer = 0
    For Each v As Integer In values
        res += v
    Next
    Console.WriteLine(res)
End Sub

Public Sub Main()
    TotalSum2(a, b, c, d)
End Sub

引数で勝手に配列にしてくれるようなイメージですね。