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 )