可选的ByVal布尔参数未采用其默认值

时间:2013-07-12 12:24:56

标签: vb.net visual-studio-2008

我正在调试一个项目,它有一个带有以下签名的函数:

Public Function changeRemoteDirectory(ByVal newDirectory As String, Optional ByVal Direction As Boolean = True) As Boolean

    MsgBox(direction)

    'rest of code

End Function

我试图找出是什么导致此函数返回False的值,当我知道它应该返回True给定我提供的输入时,所以我放{{1}进入MsgBox(direction)以查看Function时调用direction的价值。我调用了这样的函数,但我收到了一个Function,其MsgBox的值显示为direction

False

第一个参数工作得很好,需要它执行的代码才能正常工作,但我无法弄清楚为什么changeRemoteDirectory("/internal") 的值为Direction,我相信它应该是其默认值为False。如果需要,我并不完全反对重写True,但是在这里有人可以看出为什么Function在调用函数Direction时没有True的值没有提供第二个参数?

1 个答案:

答案 0 :(得分:2)

听起来你正在经历可选参数导致的许多痛苦之一。

当编译调用changeRemoteDirectory的代码时,可选参数将被注入调用,就像在编译时将替换const一样。如果没有重新编译调用者,对可选参数值的更改将不会生效。

有关详细信息,请参阅this article

通常,您应该使用方法重载而不是可选参数。您可以获得所有相同的功能,而不会产生任何痛苦和性能缺陷。