Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In der Regel können Sie keine Prozedur mit mehr Argumenten aufrufen, als die Prozedurdeklaration angibt. Wenn Sie eine unbegrenzte Anzahl von Argumenten benötigen, können Sie ein Parameterarray deklarieren, mit dem eine Prozedur ein Array von Werten für einen Parameter akzeptieren kann. Sie müssen die Anzahl der Elemente im Parameterarray nicht kennen, wenn Sie die Prozedur definieren. Die Arraygröße wird durch jeden Aufruf der Prozedur einzeln bestimmt.
Deklarieren eines ParamArray
Sie verwenden das ParamArray-Schlüsselwort , um ein Parameterarray in der Parameterliste zu kennzeichnen. Es gelten die folgenden Regeln:
Eine Prozedur kann nur ein Parameterarray definieren und muss der letzte Parameter in der Prozedurdefinition sein.
Das Parameterarray muss nach Wert übergeben werden. Es empfiehlt sich, das ByVal-Schlüsselwort explizit in die Prozedurdefinition einzuschließen.
Das Parameterarray ist automatisch optional. Der Standardwert ist ein leeres eindimensionales Array des Elementtyps des Parameterarrays.
Alle Parameter vor dem Parameterarray müssen erforderlich sein. Das Parameterarray muss der einzige optionale Parameter sein.
Aufrufen eines ParamArray
Wenn Sie eine Prozedur aufrufen, die ein Parameterarray definiert, können Sie das Argument auf eine der folgenden Arten bereitstellen:
Nichts – das heißt, Sie können das ParamArray-Argument weglassen. In diesem Fall wird ein leeres Array an die Prozedur übergeben. Wenn Sie das Schlüsselwort Nothing explizit übergeben, wird ein NULL-Array an die Prozedur übergeben und kann zu einer NullReferenceException führen, wenn die aufgerufene Prozedur nicht auf diese Bedingung überprüft.
Eine Liste einer beliebigen Anzahl von Argumenten, getrennt durch Kommas. Der Datentyp jedes Arguments muss implizit in den
ParamArray
Elementtyp konvertierbar sein.Ein Array mit demselben Elementtyp wie der Elementtyp des Parameterarrays.
In allen Fällen behandelt der Code innerhalb der Prozedur das Parameterarray als eindimensionales Array mit Elementen desselben Datentyps wie der ParamArray
Datentyp.
Von Bedeutung
Wenn Sie mit einem Array umgehen, das unbegrenzt groß sein kann, besteht das Risiko, dass einige interne Kapazität Ihrer Anwendung überlaufen wird. Wenn Sie ein Parameterarray akzeptieren, sollten Sie die Größe des Arrays testen, das der aufrufende Code an das Array übergeben hat. Führen Sie geeignete Schritte aus, wenn sie für Ihre Anwendung zu groß ist. Weitere Informationen finden Sie unter Arrays.
Beispiel
Im folgenden Beispiel wird die Funktion calcSum
definiert und aufgerufen. Der ParamArray
Modifizierer für den Parameter args
ermöglicht es der Funktion, eine variable Anzahl von Argumenten zu akzeptieren.
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
Im folgenden Beispiel wird eine Prozedur mit einem Parameterarray definiert und die Werte aller Arrayelemente ausgegeben, die an das Parameterarray übergeben werden.
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)