逻辑运算符(And、AndAlso、Or、OrElse、&&、&、||、|)
来源:互联网 发布:男士牛仔衣搭配知乎 编辑:程序博客网 时间:2024/05/21 16:55
从学编程开始,在逻辑运算符方面一直有一个“短路”的概念。在使用.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 对应 |
出错代码:
(略)
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 对应 |
0 0
- 逻辑运算符(And、AndAlso、Or、OrElse、&&、&、||、|)
- AndAlso,OrElse和And,Or的区别
- AndAlso,OrElse和And,Or的区别
- AndAlso,OrElse和And,Or的区别
- AndAlso,OrElse和And,Or的区别
- AndAlso,OrElse和And,Or的区别
- AndAlso,OrElse和And,Or的区别
- ERLANG 中的 AND ANDALSO OR ORELSE
- ERLANG 中的 AND ANDALSO OR ORELSE
- And 和 AndAlso,Or 和 OrElse 的区别
- VB AndAlso,OrElse和And,Or的区别
- VB AndAlso,OrElse和And,Or的区别
- VB AndAlso,OrElse和And,Or的区别
- OrElse, AndAlso
- AndAlso & OrElse Operators in C#短路运算符
- and or 逻辑运算符用法
- OrElse 運算子和AndAlso 運算子
- lua and or not 逻辑运算符
- 关于B树,B+树
- hdoj 2028 Lowest Common Multiple Plus【GCD】
- UISegmentedControl
- UISwitch
- java---表、栈和队列
- 逻辑运算符(And、AndAlso、Or、OrElse、&&、&、||、|)
- 线性判别分析(Linear Discriminant Analysis, LDA)算法分析
- Xcode终端爆炸之显示TEMPLATE END的解决办法
- 云服务器是什么 ?云服务器有什么优势 ?
- TCP/IP详解 卷1 笔记 第17章 TCP:传输控制协议
- UIButton
- linux 清空文件内容若干方法
- 机器视觉算法之物体方位特征提取
- 求逆序数