使用默认参数的q / a太多了,我很难找到想要的东西。不是说我不能用一个(或多个)if ... then ... end if来解决这个问题,而是我想找出是否有一种(更好的)方法(简单,内联,例如通过使用) IIf)。所以我的问题是这样的: 是否有任何关键字可以告诉被调用函数应使用默认值而不是该关键字。例如:
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
答案 0 :(得分:0)
您几乎可以做到的有趣的事情。虽然花了我足够长的时间才能理解你想要的东西!
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
只要不是不可能的区分,就可以根据需要任意设置。
玩得开心!