vb.net - (OrElse 和 Or) 和 (AndAlso 和 And) - 何时使用?

标签 vb.net syntax operators

(OrElse 和 Or) 和 (AndAlso 和 And) 之间有什么区别? 他们的表现有什么不同吗,比如说正确性的好处?有什么情况我不应该使用 OrElse 和 AndAlso 吗?

最佳答案

Or/And始终计算两个1表达式,然后返回结果。它们没有短路。

OrElse/AndAlsoshort-circuiting 。仅当无法仅根据左侧表达式的求值确定结果时,才求值右侧表达式。 (这意味着:OrElse 仅在左侧表达式为 false 时才会计算右侧表达式,而 AndAlso 仅在左侧表达式为 true 时才会计算右侧表达式。)

假设表达式中没有副作用发生,并且表达式不相关(并且忽略任何执行开销),那么它们是相同的。

但是,在许多情况下,表达式相关的。例如,当 List 不为空并且有多个元素时,我们想要做某事:

If list IsNot Nothing AndAlso list.Length > 0 Then .. 'list has stuff

这也可以用来避免“昂贵的”计算(或副作用,恶心!):

If Not Validate(x) OrElse Not ExpensiveValidate(x) Then .. 'not valid

就我个人而言,我发现 AndAlsoOrElse 是在除 1% 或更少之外的所有操作符中使用的正确运算符,希望如此! - 需要副作用的情况。

祝你编码愉快。

<小时/>

1 第一个表达式中抛出的异常将阻止第二个表达式的计算,但这不足为奇..

关于vb.net - (OrElse 和 Or) 和 (AndAlso 和 And) - 何时使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8409467/

相关文章:

bash - 为什么 bash -n 和 -z 测试运算符不是 $@ 的反函数

vb.net - 从 vb.net 中的一串数字中提取特定数字

mysql - 访问 mysql 数据库并将其显示在 gridview 或表中

java - Sqlite 语法错误

javascript - Coffeescript:当我尝试创建对象文字的对象文字时出现意外的 '{'

.net - 如何在.NET PowerShell自动化中使用Where-Object?

C++ 为什么 operator-> 会中断嵌套的 operator() 调用?

operators - 使用 ALU 运算符向右移一位?

.net - 以编程方式隐藏 PropertyGrid 中的字段

vb.net - 自动旋转画中画框