当过程定义可选参数时,可能需要确定调用代码是否已经提供对应的参数或省略此参数。
如果参数值与其默认值相等,则可能是由于以下两种原因之一:
-
调用代码在过程调用中省略此参数;或者
-
调用代码提供的参数与参数的默认值完全相等。
过程代码无法区分这两种可能性。通常这样没有什么影响,但有些情况过程可能需要对每种可能性执行不同的操作。最好的方法就是定义与默认值不同的值,尽管这样不能保证调用代码无法提供此值。
如果确定调用程序是否提供可选参数十分重要,则最安全的方法就是定义过程的重载版本。请参见 如何:定义一个过程的多个版本 和 重载过程注意事项。
确定是否已将变量传递给可选参数
-
定义与参数的默认值完全不同的值。
-
如果可选参数是像 String 这样的引用类型,则可以使用 Nothing 作为默认值,除非它正好是变量期待的值。
-
在过程代码中比较此参数和默认值,并执行适当的操作。
重载过程(一个使用可选参数,一个不使用可选参数) 下面的过程定义一个可选参数 office,并测试其默认值 QJZ,以查看它是否在调用中被省略。
Visual Basic
Sub notify(ByVal company As String, Optional ByVal office As String = "QJZ") If office = "QJZ" Then Debug.WriteLine("office not supplied -- using Headquarters") office = "Headquarters" End If ' Insert code to notify headquarters or specified office. End Sub
如果调用代码没有在参数列表中为 office 提供值,则 Visual Basic 将提供默认值“QJZ”。
如果可选参数是像 String 这样的引用类型,则可以使用 Nothing (Visual Basic) 作为默认值,除非它是变量期待的值。
有关如何使用重载确定是否已传递可选参数的示例,请参见 如何:重载带有可选参数的过程。

