快速问题,其中最快捷,最简单的答案可能是重新安排相关代码,但让我们看看......
所以我有一个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
Run Code Online (Sandbox Code Playgroud)
或者更确切地说:
If (example Is Nothing Or Not example.Item = compare.Item) Then
'Proceed
End If
Run Code Online (Sandbox Code Playgroud)
在这里,如果example是Nothing(null)然后我仍然得到NullReferenceException- 这是我的错,还是我只需要忍受VB.NET的一时兴起?
Jon*_*eet 53
这是你的"错误",因为它是如何Or定义的,所以这是你应该期望的行为:
在布尔比较中,Or运算符始终计算两个表达式,这可能包括进行过程调用.OrElse运算符(Visual Basic)执行短路,这意味着如果expression1为True,则不计算expression2.
但你不必忍受它.您可以使用OrElse来获得短路行为.
所以你可能想要:
If (example Is Nothing OrElse Not example.Item = compare.Item) Then
'Proceed
End If
Run Code Online (Sandbox Code Playgroud)
我不能说它读得非常好,但它应该有用......
| 归档时间: |
|
| 查看次数: |
99673 次 |
| 最近记录: |