我想知道如何使用非常量值指定可选参数? 以此为例:
Private Sub Foo(Optional ByVal Name as String = Application.ExecutablePath)
MsgBox("name: " & Name)
End Sub
有工作吗? 所以我可以在参数中使用非常量值作为可选项?
答案 0 :(得分:3)
有解决方法吗?
是:
Private Sub Foo(Optional ByVal Name As String = Nothing)
If Name Is Nothing Then
Name = Application.ExecutablePath
End If
MsgBox("name: " & Name)
End Sub
答案 1 :(得分:1)
最常见的方法是完全避免Optional
语句并使用函数重载。这意味着您使用不同的声明多次定义具有相同名称的函数,如下所示:
Private Sub Foo()
Foo(Application.ExecutablePath)
End Sub
Private Sub Foo(ByVal Name as String)
MsgBox("name: " & Name)
End Sub
这样,您可以在调用函数时提供名称。根据您使用的声明使用正确的功能 这种方法看起来更复杂,在这种简单的情况下可能就是这样。但是当你的声明变得更复杂时,在不同的顺序中混合了非可选参数的更多可选参数,你将很快学会欣赏重载的可能性,我保证。
答案 2 :(得分:1)
扩展Tim的正确答案
使用If
运算符可以使此代码更简洁。如果参数为Nothing
Private Sub Foo(Optional ByVal Name As String = Nothing)
Name = If(Name, Application.ExecutablePath)
MsgBox("name: " & Name)
End Sub
If
运算符是在2010 IIRC中引入的,因此此代码在旧版Visual Studio中不起作用
答案 3 :(得分:0)
您必须将其设置为未使用/保留的常量,然后在方法中检查它。
Private Sub(Optional ByVal Name as String = Nothing)
If Name Is Nothing Then Name = Application.ExecutablePath
MsgBox("name: " & Name)
End Sub
对于一些额外的细节,你可以使用xml注释和属性通过intellisense指示真正的“默认”值是什么。