首页 > 解决方案 > vb.net 传递一个值,该值将告诉函数使用它的默认值

问题描述

有很多带有默认参数的 q/a,我无法轻松找到我要查找的内容。并不是说我不能用一个(或多个)if ... then ... end if 来解决这个问题,但我想知道是否有更好的方法(更简单,内联,即使用如果)。所以我的问题是:是否有任何关键字可以告诉被调用函数它应该使用默认值而不是该关键字。例如:

  Public Function A(Optional ConnectionString As String = Nothing) As String
    A = B(IIf(ConnectionString Is Nothing, "keyword", ConnectionString))
  End Function

  Public Function B(Optional ConnectionString As String = "Something") As String
    'do something
  End Function

我需要这个的原因只是为了更简洁的代码。有时这些函数内部有更多条件,并且嵌套更多 if(s) 会使代码变得繁琐。

谢谢

编辑

我现在这样工作(不希望这是解决方案):

  Public Function A(Optional ConnectionString As String = Nothing) As String
    if ConnectionString Is Nothing then
      A = B()
    else
      A = B(ConnectionString)
    end if
  End Function

那么,我可以写这样的东西吗(我希望这是可能的):

  Public Function A(Optional ConnectionString As String = Nothing) As String
      A = B(if(ConnectionString, default))
    end if
  End Function

默认将故障恢复为 B 函数中参数的默认值。

编辑 2

我试图将连接字符串指定为函数 A 中可选参数的默认值,但它无法以某种方式工作,因此我选择寻找我在上面的问题中写过的解决方案。 这里的可选参数不起作用,看这张图

标签: vb.net

解决方案



编辑

有趣的是,您几乎可以完全做到这一点。不过,我花了足够长的时间来理解你想要什么!

Public Function A(Optional ConnectionString As String = Nothing) As String
    A = If(ConnectionString is Nothing, B(), B(ConnectionString))
End Function

此行下方的原始答案

同一个函数调用可以有多个重载。

Public Sub Example()
    Example("DefaultValue")
End Sub

Public Sub Example(ByVal value As String)
    'do things
End Sub

在此示例中,您可以调用任何一个:

Example()    'This will use the default value by calling the other sub with an overload you already defines as "default"

或者

Example("SomeString")    'This is your normal overloaded Sub

只要它们不是无法区分的,您可以拥有任意数量的它们。

玩得开心!


推荐阅读