3 回答

TA貢獻1966條經驗 獲得超4個贊
唯一的短路(某種程度上)是在Case表達式求值內,因此以下令人費解的語句可以滿足我的要求。
Select Case True
Case (myObject Is Nothing), Not myObject.test()
MsgBox "no instance or test == false"
Case Else
MsgBox "got instance & test == true"
End Select
End Sub

TA貢獻1856條經驗 獲得超5個贊
這是一個古老的問題,但是這個問題仍然存在。我使用的一種解決方法:
Dim success As Boolean ' False by default.
If myObj Is Nothing Then ' Object is nothing, success = False already, do nothing.
ElseIf Not myObj.test() Then ' Test failed, success = False already, do nothing.
Else: success = True ' Object is not nothing and test passed.
End If
If success Then
' Do stuff...
Else
' Do other stuff...
End If
這基本上顛倒了原始問題的邏輯,但是您得到的結果相同。我認為這是一個比僅使用If語句的解決方案更干凈的解決方案。使用Select語句的解決方案很聰明,但是如果您只想使用If語句來替代,我認為這是可以使用的解決方案。

TA貢獻1816條經驗 獲得超6個贊
或者,您可以創建一個將對象作為參數并返回布爾值的函數。那就是我通常的目的。
即
if Proceed(objMyAwesomeObject) then
'do some really neat stuff here
else
'do something else, eh
end if
...
end sub
private function Proceed(objMyAwesomeObject as Object)
if not objMyAweseomeObject is nothing then
Proceed = true
elseif objMyAwesomeObject.SomeProperty = SomeValue then
Proceed = true
else
Proceed = false
endif
end function
- 3 回答
- 0 關注
- 783 瀏覽
添加回答
舉報