パラメーター配列 (Visual Basic)
通常、プロシージャ宣言で指定されている引数よりも多くの引数でプロシージャを呼び出すことはできません。 不特定数の引数が必要な場合は、"パラメーター配列" を宣言できます。これにより、プロシージャはパラメーターの値の配列を受け入れることができます。 プロシージャを定義するときに、パラメーター配列の要素の数がわかっている必要はありません。 配列のサイズは、プロシージャの呼び出しごとに個別に決定されます。
ParamArray の宣言
ParamArray キーワードを使用して、パラメーター リスト内のパラメーター配列を示します。 次の規則が適用されます。
プロシージャではパラメーター配列を 1 つだけ定義でき、プロシージャ定義の最後のパラメーターである必要があります。
パラメーター配列は値渡しにする必要があります。 プロシージャの定義に ByVal キーワードを明示的に含めることをお勧めします。
パラメーター配列は自動的に省略可能になります。 既定値は、パラメーター配列の要素型の空の 1 次元配列です。
パラメーター配列の前にあるすべてのパラメーターが必須である必要があります。 パラメーター配列が唯一の省略可能なパラメーターでなければなりません。
ParamArray の呼び出し
パラメーター配列が定義されているプロシージャを呼び出すときは、次のいずれかの方法で引数を指定できます。
Nothing - つまり、ParamArray 引数を省略できます。 この場合、プロシージャに空の配列が渡されます。 Nothing キーワードを明示的に渡すと、プロシージャに null 配列が渡されます。呼び出されたプロシージャがこの条件をチェックしない場合、NullReferenceException が発生する可能性があります。
コンマで区切られた任意の数の引数のリスト。 各引数のデータ型は、
ParamArray
要素型に暗黙的に変換できる必要があります。パラメーター配列の要素型と同じ要素型の配列。
どの場合も、プロシージャ内のコードは、パラメーター配列を、ParamArray
のデータ型と同じデータ型の要素を含む 1 次元配列として扱います。
重要
無限に大きくなる可能性がある配列を処理する場合は常に、アプリケーションの何らかの内部容量が超過するリスクがあります。 パラメーター配列を受け入れる場合は、呼び出し元のコードから渡された配列のサイズをテストする必要があります。 アプリケーションにとって大きすぎる場合は、適切な手順を実行してください。 詳細については、「配列」を参照してください。
例
次の例では、calcSum
関数を定義して呼び出します。 args
パラメーターの ParamArray
修飾子により、関数は可変数の引数を受け入れることができます。
Module Module1
Sub Main()
' In the following function call, CalcSum's local variables
' are assigned the following values: args(0) = 4, args(1) = 3,
' and so on. The displayed sum is 10.
Dim returnedValue As Double = CalcSum(4, 3, 2, 1)
Console.WriteLine("Sum: " & returnedValue)
' Parameter args accepts zero or more arguments. The sum
' displayed by the following statements is 0.
returnedValue = CalcSum()
Console.WriteLine("Sum: " & returnedValue)
End Sub
Public Function CalcSum(ByVal ParamArray args() As Double) As Double
CalcSum = 0
If args.Length <= 0 Then Exit Function
For i As Integer = 0 To UBound(args, 1)
CalcSum += args(i)
Next i
End Function
End Module
次の例では、パラメーター配列を使用するプロシージャを定義し、パラメーター配列に渡されたすべての配列要素の値を出力します。
Sub studentScores(ByVal name As String, ByVal ParamArray scores() As String)
Debug.WriteLine("Scores for " & name & ":" & vbCrLf)
' Use UBound to determine largest subscript of the array.
For i As Integer = 0 To UBound(scores, 1)
Debug.WriteLine("Score " & i & ": " & scores(i))
Next i
End Sub
Call studentScores("Anne", "10", "26", "32", "15", "22", "24", "16")
Call studentScores("Mary", "High", "Low", "Average", "High")
Dim JohnScores() As String = {"35", "Absent", "21", "30"}
Call studentScores("John", JohnScores)
関連項目
.NET