VB - And AndAlso - 使用And运算符的任何理由?

时间:2015-08-10 14:04:42

标签: vb.net

在评估表达式时,"{\"brand\":\"newBrand\",\"Id\":\"1\",\"field\":\"1\",\"date\":1437487498449,\"period\":2,\"newUser\":0}" 优先于And的实例是什么?我假设早期的关键字仅用于向后兼容,但仍然使用AndAlso

谢谢!

- 问题已根据要求进行了编辑,使其(更多?)独一无二。

我读了这个问题What is the difference between And and AndAlso in VB.NET?

我理解And和AndAlso的概念差异,这不是我所要求的,可以通过阅读来辨别。有了这个,我没有看到这是一个重复的问题,它已经由Jon Hanna得到了一个很好的答案。

再次,谢谢。

1 个答案:

答案 0 :(得分:1)

使用And而不是AndAlso有三个原因(虽然VB.Net运算符并不总是与C#运算符直接比较,但这适用于& vs {{ 1}}在C#中也是如此。

第一个是你不比较布尔值,而是进行逐位比较。

&&

第二种情况是,您希望确保由于副作用而计算两个表达式。但是,在这种情况下,我建议您先计算它们,然后再执行13 And 92 ' 12 13 AndAlso 92 ' True And,以获得更清晰的代码。

第三是避免分支。考虑一下:

AndAlso

与以下内容大致相同:

If x AndAlso y Then
' Do something
End If

现在,通过现代计算机的工作方式,处理器在知道这些指令是否真的是下一个指令之前会阅读下面的一些指令,因为它还没有确定它是否会跟随{{1}分支与否。有一些聪明的东西猜测是否会采取分支,但这些聪明的东西仍然只是在猜测。如果它猜错了那就必须备份,这会减慢速度。

因此,如果计算If x Then If y Then ' Do Something End If End If 的第二个参数小于某个阈值,If实际上可能会更快,因为虽然概念上有更多的工作要做{{1}在第一个参数为AndAlso(允许And短路)的情况下,AndAndAlso只有一个分支来预测而不是两个分支,并且正确猜测分支哪个更大的几率。 (搜索"分支预测"和"分支错误预测"这里有关于该一般问题的更多信息)。