(OrElse和Or)与(AndAlso和And)有什么区别?
他们的表现有什么不同,可以说正确性好处吗?有没有我不应该使用OrElse和AndAlso的情况?
最佳答案
Or/And
将始终对两个表达式都求值,然后返回结果。它们没有短路。OrElse/AndAlso
是short-circuiting。仅当无法仅通过对左表达式的评估无法确定结果时,才对右表达式进行评估。 (这意味着:OrElse
仅在左表达式为false时才评估右表达式,而AndAlso
仅在左表达式为true时才评估右表达式。)
假设表达式中没有副作用,并且表达式不相关(并且忽略了任何执行开销),则它们是相同的。
但是,在许多情况下,表达式是依赖的。例如,当List为No-Nothing并且具有多个元素时,我们想做一些事情:
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/