是否有Or
比OrElse
更好用的情况?
如果没有,为什么他们不只是“升级”内部代码?
答案 0 :(得分:8)
使用Or
的唯一原因是你需要按位算术,即你想要操作数字中的位:
Sub SetBit(value As Integer, Bit As Integer)
value = value Or (1 << Bit)
End Sub
这种情况是唯一适合Or
的情况。在所有其他情况下(即使用布尔逻辑时),请使用OrElse
。
尽管名称相似,但Or
和OrElse
在语义上是完全不同的操作,不应相互混淆。恰好是Boolean
s的内部表示使得可以使用按位Or
来实现与OrElse
相似(但不相同)的效果。 (旧版本的BASIC和VB - 在.NET之前 - 仅通过 提供Or
操作来利用此关系,而不是OrElse
。)
答案 1 :(得分:3)
你应该总是使用OrElse而不是Or,除非进行逐位算术。
OrElse是一种短路比较,意味着如果第一项是真的,它将不会评估第二项。这非常有用,因为你经常会想要在没有短路的情况下失败的子句(例如,x不是OrElse而不是x.HasSomeProperty)。
无法自动将所有'或'升级为'OrElse'的原因是因为对第二个子句的评估可能很重要。例如,我可以写“True或SomeBooleanMethodWhichMightThrowAnEception()”。将Or改为OrElse会改变程序的含义。
答案 2 :(得分:2)
修改:此代码邪恶;我只是添加了这个答案,表明这是可能的。
另一种情况是在评估必须发生某种副作用的表达式时使用Or:
Sub DoSomething()
Dim succeeded As Boolean
succeeded = FirstThing() Or SecondThing() Or ThirdThing()
If succeeded Then
' Do something here
End If
End Sub
在这种情况下,FirstThing,SecondThing和ThirdThing是在累积成功值时必须作为整体执行的方法,无论它们是否有任何失败。如果您使用OrElse,那么如果FirstThing或SecondThing失败,则不会发生失败方法背后的操作。