Possible Duplicate:
Should I always use the AndAlso and OrElse operators?




在针对所有场景的实际实现中,逻辑表达式将为AndAndAlso返回相同的布尔值,

为什么当前一个条件为false时,我们不总是使用AndAlso并保存下一个条件的处理时间?换句话说,为什么And仍在使用?

最佳答案

VB.NET中的And运算符执行两项工作,它既是逻辑运算符又是数学运算符。 Visual Basic的早期版本无法区分两者。通过设计,该语言被设计为易于使用,并迫使Visual Basic程序员学习差异,这是语言设计人员希望避免的事情。

尽管它使该语言有些怪异,但效果很好。例如,True的值不是1,就像在许多语言中一样,它是-1。您从CInt(True)获得的值。它允许忽略运算符的两种用法之间的区别,例如,当If()语句使用And且左侧为Integer且右侧为Boolean时,它仍然可以很好地工作。

但是And运算符同时扮演两个角色,这是一个非常具体的问题。常见用法是编写如下语句:

If ix < array.Length And array(ix) <> 42 Then
   '' do something
End If


该语句将使您的代码因IndexOutOfRangeException而崩溃。您的意思是“如果索引超出范围,则不必费心检查数组元素”。这就是所谓的“短路评估”。但这不是And运算符的作用,它同时计算左表达式和右表达式。就像And运算符的数学版本一样。

短路评估很重要,并且已经有很长时间了。并且从C开始在花括号语言中被普遍采用。最后在VB.NET中也被广泛采用,您可以这样编写,以避免出现异常:

If ix < array.Length AndAlso array(ix) <> 42 Then
   '' do something
End If


因此,请回答您的问题:是的,当您打算使用And运算符的逻辑版本时,请始终使用AndAlso。 AndAlso是逻辑版本。

关于.net - 为什么AndAlso不能代替And ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13782516/

10-10 15:28