VB.NET'如果'带有'或'条件的语句双方都进行了评估?

时间:2011-01-18 10:56:58

标签: .net vb.net

快速提问,其中最快捷,最简单的答案可能是重新安排相关代码,但让我们看看......

所以我有一个If语句(一段代码,它是用C#编写的完整工作解决方案的一部分),用VB.NET重写。我知道VB.NET IIf(a, b, c)方法评估ba,无论第一次评估的真实性如何,但似乎是的情况。我的标准构造也是:

If (example Is Nothing Or example.Item IsNot compare.Item) Then
    'Proceed
End If

或者更确切地说:

If (example Is Nothing Or Not example.Item = compare.Item) Then
    'Proceed
End If

在这里,如果exampleNothingnull),那么我仍然会得到NullReferenceException - 这是我的错,或者是我必须忍受的事情VB.NET的心血来潮?

2 个答案:

答案 0 :(得分:53)

这是你的“错误”,因为Or是如何定义的,所以这是你应该期待的行为:

  

在布尔比较中,Or运算符始终计算两个表达式,包括进行过程调用。 OrElse运算符(Visual Basic)执行短路,这意味着如果expression1为True,则不计算expression2。

但你不必忍受它。您可以使用OrElse来获取短路行为。

所以你可能想要:

If (example Is Nothing OrElse Not example.Item = compare.Item) Then
    'Proceed
End If

我不能说读取非常好,但它应该有效......

答案 1 :(得分:22)

OrElseOr

的短路等价物