[ VB.NET / C# ] 型違いの可変長パラメーター (ParamArray, params)

Pocket

VB.NET では、ParamArray キーワード、 C# では params キーワードを指定することで任意の個数のパラメータをメソッドに対して与えることができます。

スポンサーリンク

可変長パラメータサンプル

可変長パラメーター定義を行うと、引数に任意の個数 ( 0 個でも OK ) の受け渡しができます、また、配列でも受け渡しができます。

VB.NET

    ' 呼び出し側
    Try
        ' パラメーターを列挙して与える
        Dim ave As Double = Average(1, 2, 3, 4, 5)

        Dim values() As Double = {1, 2, 3, 4, 5}
        '配列でパラメーターを与える
        Dim ave2 As Double = Average(values)

        'パラメーターを与えない(例外発生)
        Dim ave3 As Double = Average()

    Catch ex As Exception
        Console.WriteLine(ex.Message)
    End Try

    ''' 平均を求める 平均=データの総和÷個数
    Public Function Average(ByVal ParamArray values() As Double) As Double

        ' パラメーターなしで呼ばれた場合は例外発生
        If values.Length = 0 Then Throw New Exception("parameter error")

        Dim ave As Double = 0

        ' 総和を求める
        For Each val As Double In values
            ave += val
        Next
        'データ個数で割る
        Return (ave / values.Count)

    End Function

C#

    // 呼び出し側
    try
    {
        // パラメーターを列挙して与える
        double ave = Average(1, 2, 3, 4, 5);

        double[] values = {1, 2, 3, 4, 5};
        //配列でパラメーターを与える
        double ave2 = Average(values);

        //パラメーターを与えない(例外発生)
        double ave3 = Average();
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
    
    /// 平均を求める 平均=データの総和÷個数
    public double Average(params double[] values)
    {
        // パラメーターなしで呼ばれた場合は例外発生
        if (values.Length == 0) throw new Exception("parameter error");

        double ave = 0;

        // 総和を求める
        foreach (double val in values)
        {
            ave += val;
        }
        //データ個数で割る
        return (ave / values.Length);
    }

可変長パラメーターの制約

可変長パラメーターには以下のような制約があります。

  • 複数のパラメーターがある場合は、最後に定義しなければならない
  • 可変長パラメーターの前に省略可能パラメーターがあってはならない
  • 複数の可変長パラメーターを定義することはできない

どれも当然の制約と言えるので、気になることはないでしょう

型の違う任意の個数のパラメーターの受け渡し

型の違う変数を任意の個数パラメータに与えたい場合は、Object 型の可変長パラメタ定義とします。String.Format 関数のパラメータ定義は Object 型の定義を有効に使用している良いサンプルだと思います。同じ型の可変長定義はあまり有効な利用方法が思いつきません。

String.Format メソッド定義

VB.NET

Public Shared Function Format ( _
	format As String, _
	ParamArray args As Object() _
) As String

C#

public static string Format(
	string format,
	params Object[] args
)
スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *