(OrElse 和 Or) 和 (AndAlso 和 And) 之间有什么区别? 他们的表现有什么不同吗,比如说正确性的好处?有什么情况我不应该使用 OrElse 和 AndAlso 吗?
最佳答案
Or/And
将始终计算两个1表达式,然后返回结果。它们没有短路。
OrElse/AndAlso
是 short-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
就我个人而言,我发现 AndAlso
和 OrElse
是在除 1% 或更少之外的所有操作符中使用的正确运算符,希望如此! - 需要副作用的情况。
祝你编码愉快。
<小时/>1 第一个表达式中抛出的异常将阻止第二个表达式的计算,但这不足为奇..
关于vb.net - (OrElse 和 Or) 和 (AndAlso 和 And) - 何时使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8409467/