可选参数不带常量

时间:2014-03-20 20:42:45

标签: vb.net function parameters optional

我想知道如何使用非常量值指定可选参数? 以此为例:

Private Sub Foo(Optional ByVal Name as String = Application.ExecutablePath)
    MsgBox("name: " & Name)
End Sub

有工作吗? 所以我可以在参数中使用非常量值作为可选项?

4 个答案:

答案 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指示真正的“默认”值是什么。