參數陣列 (Visual Basic)
通常,您無法以多於程序宣告指定的引數呼叫一個程序。 當您需要不確定數目的引數時,可以宣告「參數陣列」(Parameter Array),讓程序能接受參數的陣列值。 當您定義該程序時,並不需要知道該參數陣列中項目的數目。 陣列的大小取決於程序的每一個呼叫。
宣告 ParamArray
您可使用 ParamArray (Visual Basic) 關鍵字,來代表參數清單中的參數陣列。 可套用下列規則:
一個程序只能定義一個參數陣列,它必須是程序定義中的最後一個參數。
參數陣列必須以傳值的方式傳遞。 明確地將 ByVal (Visual Basic) 關鍵字包括在程序定義中是良好的程式設計方式。
參數陣列自動成為選擇性的。 它的預設值是參數陣列的元素型別之空白一維陣列。
參數陣列之前的所有參數必須是必要的。 參數陣列必須是唯一的選擇性參數。
呼叫 ParamArray
呼叫定義參數陣列的程序時,可利用下列任一方式提供引數:
Nothing:也就是可省略 ParamArray (Visual Basic) 引數。 在這個情況下,會傳遞空的陣列到程序中。 您也可以傳遞 Nothing (Visual Basic) 關鍵字,效果是一樣的。
任意數目的引數清單,由逗號分隔。 每一個引數的資料型別必須可以隱含轉換為 ParamArray 項目型別。
元素型別與參數陣列之元素型別相同的陣列。
在所有的情況下,程序內的程式碼必須將參數陣列視為一維陣列,且其元素的資料型別會與 ParamArray 資料型別相同。
安全性提示 |
---|
只要處理可能是無限大的陣列,就會有導致應用程式內部容量滿溢的風險。如果接受參數陣列,則您應該測試呼叫程式碼傳給它的陣列大小。若對應用程式而言太大,請執行適當的步驟。如需詳細資訊,請參閱 Visual Basic 中的陣列。 |
範例
下列範例會定義,並呼叫函式calcSum。 ParamArray參數的修飾詞args可以讓來接受不同數目引數的函式。
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)