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 )