参数数组 (Visual Basic)

通常,你无法使用超过过程声明指定数量的参数来调用该过程。 需要使用无限数量的参数时,可以声明一个参数数组,使过程能够接受参数值的数组。 在定义过程时,不必要知道参数数组中有多少个元素。 数组大小由该过程的每次调用单独决定。

声明 ParamArray

使用 ParamArray 关键字来表示参数列表中的参数数组。 下列规则适用:

  • 一个过程只能定义一个参数数组,并且该参数必须是过程定义中的最后一个参数。

  • 参数数组必须按值传递。 良好的编程做法是在过程定义中显式包含 ByVal 关键字。

  • 参数数组原本就是可选的。 其默认值是参数数组的元素类型的空一维数组。

  • 参数数组前面的所有参数是必需的。 参数数组必须是唯一一个可选参数。

调用 ParamArray

在调用定义参数数组的过程时,可通过以下任一方式提供自变量:

  • 无 — 即,可以省略 ParamArray 参数。 在这种情况下,会将一个空数组传递给过程。 如果显式传递 Nothing 关键字,则会将一个 null 数组传递给过程;如果被调用的过程不检查此状况,可能会导致 NullReferenceException。

  • 包含任意数量的自变量的列表,自变量以逗号分隔。 每个自变量的数据类型必须可隐式转换为 ParamArray 元素类型。

  • 元素类型与参数数组的元素类型相同的数组。

在所有情况下,过程中的代码都会将参数数组视为一维数组,其中元素的数据类型与 ParamArray 数据类型相同。

重要

每当处理可能无限大的数组时,都存在超出应用程序某些内部容量的风险。 如果接受某个参数数组,应测试向其传递了调用代码的数组的大小。 如果该大小对于应用程序而言太大,请采取适当的措施。 有关详细信息,请参阅 array

示例

以下示例定义并调用函数 calcSum。 参数 ParamArrayargs 修饰符使函数能够接受可变数量的自变量。

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)

另请参阅