0

我是 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)

4

3 回答 3

2

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

If obj is Nothing OrElse obj.IsDisposed Then
'do some stuffs
End If
于 2012-09-03T05:34:58.263 回答
1

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

从上面的链接:

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

于 2012-09-03T05:39:32.867 回答
0

OrElse是你需要的。它只会评估第一次评估,只要它已经true

If obj is Nothing OrElse obj.IsDisposed Then
    'do some stuffs
End If
于 2012-09-03T05:42:25.210 回答