繁体   English   中英

VB.NET逻辑顺序在if语句中

[英]VB.NET logic order in if statement

我是VB.NET的新手,但是对于C,C ++,C#和其他语言,我有多年的经验。 对我来说,这个问题很奇怪,因为我以前从未遇到过。

我有这行代码:

If obj is Nothing Or obj.IsDisposed Then
'do some stuffs
End If

当obj为Nothing时,这行代码将显示错误,因为obj.IsDisposed不存在(没有句柄)。 据我所知,Or的第一个语句返回True,因此If语句的结果无论如何都是True。

任何人都可以给我指示如何摆脱这种情况(或者我必须写If..Then.Else If..End If)

尝试OrElse,当“ obj is Nothing”为true时,不会评估obj.Disposed

If obj is Nothing OrElse obj.IsDisposed Then
'do some stuffs
End If

您可以使用OrElse运算符 ,如果第一个为true,它将绕过第二个评估。

从上方链接:

如果编译后的代码可以根据另一个表达式的结果绕过一个表达式的求值,则逻辑操作被称为短路。 如果评估的第一个表达式的结果确定了运算的最终结果,则无需评估第二个表达式,因为它不能更改最终的结果。 如果绕过的表达式很复杂,或者涉及过程调用,则短路可以提高性能。

您需要OrElse 只要它是true ,它只会在第一次评估时评估

If obj is Nothing OrElse obj.IsDisposed Then
    'do some stuffs
End If

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM