在所有场景的实际实现中,逻辑表达式将为And
和AndAlso
返回相同的布尔值,
为什么我们不使用always AndAlso
并在前一个为false时保存下一个条件的处理时间?换句话说,为什么And
仍然在使用?
答案 0 :(得分:5)
VB.NET中的And运算符执行两个作业,它既是逻辑运算符,也是数学运算符。早期版本的Visual Basic没有区分这两者。通过设计,该语言被设计为易于使用,并迫使Visual Basic程序员学习语言设计者希望避免的差异。
虽然它给语言带来了一些怪癖,但效果还算不错。例如,True的值不是1,就像在许多语言中一样,它是-1。您从CInt(True)获得的价值。这允许忽略运算符的两个用法之间的差异,当If()语句使用时它仍然有效。当左侧是整数而右侧是布尔值时,它仍然有效。
但是And操作员扮演这两个角色是一个非常具体的问题。一个常见的用法是写一个这样的语句:
If ix < array.Length And array(ix) <> 42 Then
'' do something
End If
这是一个声明,会使您的代码因IndexOutOfRangeException而崩溃。你意味着什么是&#34;如果索引超出范围,那么就不用费心去检查数组元素&#34;。这被称为&#34;短路评估&#34;。但这不是And运算符所做的,它会评估左右表达式。就像And运算符的数学版本一样。
短路评估非常重要,并且已经存在很长时间了。并且普遍采用卷括号语言,从C开始。它最终也被VB.NET采用,你这样写就是为了避免异常:
If ix < array.Length AndAlso array(ix) <> 42 Then
'' do something
End If
所以回答你的问题:是的,当你打算使用And运算符的逻辑版本时,总是使用AndAlso。并且是的逻辑版本。
答案 1 :(得分:1)
有时您希望执行两个部分,以产生副作用。并非一切都是纯粹的功能。另外:我假设我们正在谈论布尔值,但在整数等情况下,并且意味着按位操作。