何时“或”比“OrElse”更好用?

时间:2010-01-08 13:51:36

标签: vb.net

是否有OrOrElse更好用的情况?

如果没有,为什么他们不只是“升级”内部代码?

3 个答案:

答案 0 :(得分:8)

使用Or的唯一原因是你需要按位算术,即你想要操作数字中的位:

Sub SetBit(value As Integer, Bit As Integer)
    value = value Or (1 << Bit)
End Sub

这种情况是唯一适合Or的情况。在所有其他情况下(即使用布尔逻辑时),请使用OrElse

尽管名称相似,但OrOrElse在语义上是完全不同的操作,不应相互混淆。恰好是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失败,则不会发生失败方法背后的操作。