为什么使用And而不是AndAlso?

时间:2015-06-17 19:12:52

标签: .net vb.net

我是.NET编程的新手,我最近偶然发现了AndAlso。据我了解,AndAlso评估第一个表达式,如果它是真的那么它会评估第二个表达式......依此类推。而且,另一方面,始终评估表达式中的所有术语。

如果我的理解是正确的,那么AndAlso总是(略微)更有效率。如果是这种情况,为什么要使用And?

3 个答案:

答案 0 :(得分:3)

And是按位的。 AndAlso是布尔值。

正确性,如果我们忽视短路,And总是可以在AndAlso可以使用unless you get creative)的所有情况下使用,但是反过来说不是真的。

也就是说,And是一个“通用”运算符,它将在按位和逻辑上下文中“做正确的事”,但不会对其中任何一个进行优化。 AndAlso只能在布尔上下文中使用,但它已针对它进行了优化。

Visual Basic没有使用AndAlso,因此And是唯一的选择。既然VB有AndAlsoAnd 可以用于:

  • 按位数学运算(对两个数字执行bitwise AND
  • 具有副作用的表达式(您希望禁用短路并始终评估表达式的两个部分)。我当然不会把这称为推荐的做法,因为你最终可能会得到非常不明显的代码,但是如果你从VB6升级了遗留代码,则可能没问题。

答案 1 :(得分:2)

也许这只是个人选择。但我倾向于认为And 永远不会使用 当然,按位操作需要And,但这里不是问题(你没有选择AndAndAlso之间的按位连接。) 我不喜欢“副作用”的伎俩;如果你想要副作用执行它们,然后然后测试结果值

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

是恕我直言

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

意图更清晰,但两种方式都是可能的。

答案 2 :(得分:0)

如果您的表达式有副作用,这可能很有用。例如,您的第二个表达式是您始终要运行的函数,无论之前的计算结果如何。

相关问题