3 回答
![?](http://img1.sycdn.imooc.com/533e4c5600017c5b02010200-100-100.jpg)
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
![?](http://img1.sycdn.imooc.com/533e4bec0001ae5302000200-100-100.jpg)
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语句来替代,我认为这是可以使用的解决方案。
![?](http://img1.sycdn.imooc.com/5458689e000115c602200220-100-100.jpg)
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 关注
- 731 浏览
添加回答
举报