Массивы параметров (Visual Basic)

Как правило, нельзя вызывать процедуру с большим числом аргументов, чем указано объявление процедуры. Если требуется неограниченное число аргументов, можно объявить массив параметров, который позволяет процедуре принимать массив значений для параметра. При определении процедуры не нужно знать количество элементов в массиве параметров. Размер массива определяется по отдельности каждым вызовом процедуры.

Объявление ParamArray

Для обозначения массива параметров в списке параметров используется ключевое слово ParamArray. Применяются следующие правила:

  • Процедура может определить только один массив параметров, и он должен быть последним параметром в определении процедуры.

  • Массив параметров должен передаваться по значению. Рекомендуется явно включить ключевое слово ByVal в определение процедуры.

  • Массив параметров автоматически необязателен. Значение по умолчанию — пустой одномерный массив типа элемента массива параметров.

  • Все параметры, предшествующие массиву параметров, должны быть обязательными. Массив параметров должен быть единственным необязательным параметром.

Вызов ParamArray

При вызове процедуры, определяющей массив параметров, можно указать аргумент одним из следующих способов:

  • Ничего , то есть можно опустить аргумент ParamArray . В этом случае в процедуру передается пустой массив. Если вы явным образом передаете ключевое слово Nothing, массив NULL передается в процедуру и может привести к значению NullReferenceException, если вызываемая процедура не проверка для этого условия.

  • Список произвольных аргументов, разделенных запятыми. Тип данных каждого аргумента должен быть неявно преобразован в ParamArray тип элемента.

  • Массив с тем же типом элемента, что и тип элемента массива параметров.

Во всех случаях код в процедуре обрабатывает массив параметров как одномерный массив с элементами того же типа данных, что ParamArray и тип данных.

Внимание

Всякий раз, когда вы работаете с массивом, который может быть неограниченно большим, существует риск перерасхода некоторой внутренней емкости приложения. Если вы принимаете массив параметров, необходимо проверить размер массива, который передается вызывающему коду. Выполните соответствующие действия, если оно слишком велико для приложения. Дополнительные сведения см. в статье Arrays (C++/CLI and C++/CX) (Массивы (C++/CLI и C++/CX)).

Пример

В следующем примере определяется и вызывается функция 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)

См. также