Поделиться через


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

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

Объявление ParamArray

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

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

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

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

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

Вызов ParamArray

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

  • Ничего , то есть можно опустить аргумент ParamArray . В этом случае в процедуру передается пустой массив. Если вы явно передаете ключевое слово Nothing , то в процедуру передается пустой массив и может привести к значению 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)

См. также