Parameterarrays (Visual Basic)

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, die dem Parameterarray vorangestellt sind, 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:

  • Nothing – 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 nach dieser Bedingung sucht.

  • 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.

Wichtig

Wenn Sie ein Array verwenden, das unbegrenzt groß sein kann, besteht das Risiko, dass die interne Kapazität Ihrer Anwendung überschritten 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 Maßnahmen durch, 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 Modifizierer ParamArray für den Parameter args ermöglicht es der Funktion, eine beliebige 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)

Weitere Informationen