如何:定义参数数量不确定的过程
更新:2007 年 11 月
可以将“参数数组”声明为过程的参数列表中的最后一项。这允许过程接受参数的一组值,而不仅仅是一个值。定义过程时不必知道该组中值的数目。该组由对过程的每次调用单独确定,每次调用可以传递不同数目的值。
有关更多信息,请参见 参数数组。
定义一个可以为其最后参数接受不确定数量的值的过程
在过程声明中,以普通方法定义参数列表。除最后一个参数以外的所有参数均为必选(不是 Optional (Visual Basic))。
在最后一个参数名称前面使用关键字 ByVal ParamArray。该参数自动为可选。不要包含 Optional 关键字。
在参数数组名称后面使用一对空括号。
在空括号后面使用常用的 As 子句。
不要在 As 子句后带默认值。参数数组的默认值自动为您在 As 子句中指定的数据类型的一维空数组。
使用参数数组值
过程内部的代码必须将参数数组视为一维数组,其中每个元素的数据类型都与 ParamArray 数据类型相同。
访问参数数组的其中一个值
在过程代码中,通过在参数数组名称上调用 UBound 函数 (Visual Basic) 确定传递到参数数组的数组长度。
在过程代码的可执行语句中,在参数数组名称后面使用带括号的下标。该下标应在 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。