逻辑运算符(And、AndAlso、Or、OrElse、&&、&、||、|)

  从学编程开始,在逻辑运算符方面一直有一个“短路”的概念。在使用.NET的过程中一直以为And、Or、&&、||这些逻辑运算符本身具有“短路”功能,直到开发过程中碰到这样的问题,查找MSDN后才发现原来自己对需要“短路”功能的逻辑运算一直是错的。现总结如下:

出错代码:

(略)
If obj Is Nothing Or obj.IsDisposed Then
   …………
End If
(略)

当代码运行到这块时时有Null异常出现。

MSDN上的解释:
And:对两个Boolean表达式执行逻辑和。
AndAlso:与AndAlso类似,关键差异是AndAlso显示短路行为,如果AndAlso中的第一个表达式为False,则不计算第二个表达式。
Or:对两个Boolean表达式执行逻辑或。
OrElse:与Or类似,关键差异是OrElse显示短路行为,如果OrElse中的第一个表达式为True,则不计算第二个表达式。

此时才明白上面的代码是两个判断都执行了,哪怕obj为Nothing时,obj.IsDisposed也会执行到,自然就会出现Null异常了,把Or改成OrElse后问题解决。

VB.net 与 C# 的对应
And        对应     &&
AndAlso    对应      &
Or         对应      ||
OrElse     对应      | 

posted @ 2005-06-01 17:47  文野  阅读(15376)  评论(14编辑  收藏  举报