Udostępnij za pośrednictwem


Parameter — Tablice (Visual Basic)

Zwykle nie można wywołać procedury z więcej argumentów niż określa deklaracja procedury. Jeśli potrzebujesz nieokreślonej liczby argumentów, możesz zadeklarować tablicę parametrów, która umożliwia procedurze akceptowanie tablicy wartości dla parametru. Nie musisz znać liczby elementów w tablicy parametrów podczas definiowania procedury. Rozmiar tablicy jest określany indywidualnie przez każde wywołanie procedury.

Deklarowanie paramArray

Słowo kluczowe ParamArray służy do oznaczania tablicy parametrów na liście parametrów. Obowiązują następujące zasady:

  • Procedura może definiować tylko jedną tablicę parametrów i musi być ostatnim parametrem w definicji procedury.

  • Tablica parametrów musi być przekazywana przez wartość. Dobrym rozwiązaniem programistycznym jest jawne uwzględnienie słowa kluczowego ByVal w definicji procedury.

  • Tablica parametrów jest automatycznie opcjonalna. Jego wartość domyślna jest pustą jednowymiarową tablicą typu elementu tablicy parametrów.

  • Wszystkie parametry poprzedzające tablicę parametrów muszą być wymagane. Tablica parametrów musi być jedynym parametrem opcjonalnym.

Wywoływanie paramArray

Podczas wywoływania procedury definiującej tablicę parametrów można podać argument w dowolny z następujących sposobów:

  • Nic — oznacza to, że można pominąć argument ParamArray . W takim przypadku pusta tablica jest przekazywana do procedury. Jeśli jawnie przekażesz słowo kluczowe Nothing , tablica o wartości null zostanie przekazana do procedury i może spowodować wyjątek NullReferenceException, jeśli wywołana procedura nie sprawdzi tego warunku.

  • Lista dowolnych argumentów rozdzielonych przecinkami. Typ danych każdego argumentu musi być niejawnie konwertowany na ParamArray typ elementu.

  • Tablica o tym samym typie elementu co typ elementu tablicy parametrów.

We wszystkich przypadkach kod w ramach procedury traktuje tablicę parametrów jako tablicę jednowymiarową z elementami tego samego typu danych co ParamArray typ danych.

Ważne

Za każdym razem, gdy zajmujesz się tablicą, która może być przez czas nieokreślony duża, istnieje ryzyko przekroczenia pewnej wewnętrznej pojemności aplikacji. Jeśli akceptujesz tablicę parametrów, należy przetestować rozmiar tablicy, do której przekazano kod wywołujący. Wykonaj odpowiednie kroki, jeśli aplikacja jest zbyt duża. Aby uzyskać więcej informacji, zobacz Tablice.

Przykład

Poniższy przykład definiuje i wywołuje funkcję calcSum. Modyfikator ParamArray parametru args umożliwia funkcji akceptowanie zmiennej liczby argumentów.

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

Poniższy przykład definiuje procedurę z tablicą parametrów i zwraca wartości wszystkich elementów tablicy przekazanych do tablicy parametrów.

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)

Zobacz też