aer*_*aer 44 vb.net syntax operators
(OrElse和Or)和(AndAlso和And)有什么区别?他们的表现有什么不同,让我们说正确的好处?有什么情况我不会使用OrElse和AndAlso吗?
小智 67
Or/And
将始终评估双方1个表达式,然后返回结果.它们不是短路的.
OrElse/AndAlso
是短路的.只有在单独评估左表达不能确定结果时,才评估正确的表达.(这意味着:OrElse
如果左表达式为false,AndAlso
则仅评估正确的表达式;如果左表达式为真,则仅评估正确的表达式.)
假设表达式中没有副作用,并且表达式不依赖(并且忽略任何执行开销),那么它们是相同的.
但是,在许多情况下,表达式是依赖的.例如,当List不是-Nothing并且有多个元素时,我们想要做一些事情:
If list IsNot Nothing AndAlso list.Length > 0 Then .. 'list has stuff
Run Code Online (Sandbox Code Playgroud)
这也可用于避免"昂贵"的计算(或副作用,ick!):
If Not Validate(x) OrElse Not ExpensiveValidate(x) Then .. 'not valid
Run Code Online (Sandbox Code Playgroud)
就个人而言,我发现AndAlso
并且OrElse
是正确的运算符,除了1%之外,或者更少,希望!- 需要副作用的情况.
快乐的编码.
1第一个表达式中抛出的异常将阻止第二个表达式的计算,但这应该不会令人惊讶.
Gid*_*rth 10
除了在其他答案中提到的短路之外,Or
/ And
可用作位运算符,其中OrElse
/ AndAlso
不是.按位运算包括组合Flags枚举的值,例如FileAttributes枚举,您可以指示文件既是只读的又是隐藏的FileAttributes.ReadOnly Or FileAttributes.Hidden