为什么使用 And 而不是 AndAlso?

35 浏览
0 Comments

为什么使用 And 而不是 AndAlso?

我对.NET编程还比较新,最近我偶然发现了AndAlso。据我了解,AndAlso会先评估第一个表达式,如果为真就继续评估第二个表达式...以此类推。而另一方面,则总是要评估表达式中的所有项。

如果我的理解是正确的话,那么AndAlso是否总是(稍微)更高效呢?如果是这样的话,为什么还要使用And呢?

admin 更改状态以发布 2023年5月23日
0
0 Comments

也许这是个个人偏好问题,但我倾向于认为不应该使用And
当然,位运算需要使用And,但这不是重点(你没得选择在AndAndAlso之间进行位与操作)。
我不喜欢“副效应”的技巧;如果你想要某些副作用,那就执行它们,然后测试结果值。

Dim result1 = SideEffect1(), result2 = SideEffect2()
If result1 AndAlso result2 Then ' ...

在我看来比

If SideEffect1() And SideEffect2() Then ' ...

更好理解,但两种方式都可以。

0
0 Comments

And 是按位运算符。 AndAlso 是布尔运算符。

从正确性角度来看,如果我们忽略短路计算,And 总是可以在所有情况下使用 AndAlso (除非你变得有创意),但反过来不成立。

也就是说,And 是一种“通用”的运算符,在按位和逻辑上下文中都会“做正确的事情”,但并没有针对任一方进行优化。 AndAlso 只能在布尔上下文中使用,但它是针对该上下文进行了优化。

Visual Basic 以前没有使用 AndAlso,因此 And 是唯一选择。现在 VB 有了 AndAlsoAnd 可以用于:

  • 按位运算(对两个数字执行按位与操作)
  • 具有副作用的表达式(您希望禁用短路计算并始终评估表达式的两个部分)。我肯定不会称这为建议做法,因为您可能会得到非常不明显的代码,但如果您将遗留代码从 VB6 升级,则可能还可以接受。
0