如何:定义参数数量不确定的过程 (Visual Basic)

可以将“参数数组”声明为过程的参数列表中的最后一项。 这允许过程接受参数的一组值,而不仅仅是一个值。 定义过程时不必知道该组中值的数目。 该组由对过程的每次调用单独确定,每次调用可以传递不同数目的值。

有关更多信息,请参见 参数数组 (Visual Basic)

定义一个可以为其最后参数接受不确定数量的值的过程

  1. 在过程声明中,以普通方法定义参数列表。 除最后一个参数以外的所有参数均为必选(不是 Optional (Visual Basic))。

  2. 在最后一个参数名称前面使用关键字 ByVal ParamArray。 该参数自动为可选。 不要包含 Optional 关键字。

  3. 在参数数组名称后面使用一对空括号。

  4. 在空括号后面使用常用的 As 子句。

  5. 不要在 As 子句后带默认值。 参数数组的默认值自动为您在 As 子句中指定的数据类型的一维空数组。

使用参数数组值

过程内部的代码必须将参数数组视为一维数组,其中每个元素的数据类型都与 ParamArray 数据类型相同。

访问参数数组的其中一个值

  1. 在过程代码中,通过在参数数组名称上调用 UBound 函数确定传递到参数数组的数组长度。

  2. 在过程代码的可执行语句中,在参数数组名称后面使用带括号的下标。 该下标应在 0 和由 UBound 返回的上限之间。

安全说明安全说明

每当处理可能变得无限大的数组时,都有耗尽应用程序的某部分内部容量的风险。 如果在调用代码中接受一个参数数组,您应该测试它的长度,如果它对于应用程序而言太大,应采取适当步骤。

示例

下面的示例定义带有参数数组的过程,并输出所有传递到参数数组的数组元素的值。

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

下面的示例演示典型的 studentScores 调用。

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)

编译代码

请确保 ParamArray 是参数列表中的最后参数,而且前面的参数都没有声明为 Optional。

请参见

任务

如何:调用参数数量不确定的过程 (Visual Basic)

参考

ByVal (Visual Basic)

ParamArray (Visual Basic)

概念

过程参数和变量 (Visual Basic)

通过值和通过引用传递参数 (Visual Basic)

按位置和名称传递参数 (Visual Basic)

可选参数 (Visual Basic)

过程重载 (Visual Basic)

Visual Basic 中的类型检查

数组 (Visual Basic)