快速提问,其中最快捷,最简单的答案可能是重新安排相关代码,但让我们看看......
所以我有一个If
语句(一段代码,它是用C#编写的完整工作解决方案的一部分),用VB.NET重写。我知道VB.NET IIf(a, b, c)
方法评估b
和a
,无论第一次评估的真实性如何,但似乎是的情况。我的标准构造也是:
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
在这里,如果example
是Nothing
(null
),那么我仍然会得到NullReferenceException
- 这是我的错,或者是我必须忍受的事情VB.NET的心血来潮?
答案 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)