通常,您無法呼叫具有比程式宣告指定的更多自變數的程式。 當您需要無限數目的自變數時,可以宣告 參數數位,這可讓程式接受參數的值陣列。 當您定義程式時,您不需要知道參數陣列中的元素數目。 陣列的尺寸是由程序中的每個呼叫單獨決定。
宣告 ParamArray
您可以使用 ParamArray 關鍵字來表示參數清單中的參數陣列。 適用的規則如下:
程式只能定義一個參數陣列,而且它必須是程式定義中的最後一個參數。
參數陣必須以值傳遞。 在程式定義中明確包含 ByVal 關鍵詞是很好的程式設計做法。
參數陣組是自動選擇性的。 其預設值是參數陣列元素類型的空白一維數位列。
參數陣列之前的所有參數都必須必要。 參數陣列必須是唯一的可選參數。
使用 ParamArray
當您呼叫定義參數陣列的程式時,您可以使用下列任一種方式來提供 自變數:
Nothing - 也就是說,您可以省略 ParamArray 自變數。 在此情況下,空陣列會傳遞至程序。 如果您明確傳遞 Nothing 關鍵詞,則 Null 陣列會傳遞至程式,如果呼叫的程式未檢查此條件,可能會導致 NullReferenceException。
任意數目的自變數清單,以逗號分隔。 每個自變數的數據類型必須隱含轉換成
ParamArray項目類型。陣列,與參數陣列的元素類型相同。
在所有情況下,程式碼會將參數陣列視為與 ParamArray 數據類型相同的一維陣列。
這很重要
當您處理可能無限大陣列時,可能會有超過應用程式某些內部容量的風險。 如果您接受參數陣列,您應該測試呼叫端程式代碼傳遞給它之陣列的大小。 如果某項目對您的應用程式而言太大,請採取適當的步驟。 如需詳細資訊,請參閱陣列。
範例
下列範例會定義 並呼叫 函式 calcSum。 參數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)