您的位置:首页 >> 编程开发 >> .NET >> 其它 >> 正文
其它 RSS
 

今天才发现 And 和 AndAlso 的区别

http://www.rdxx.com 04年07月15日 12:12 Blog 我要投稿

关键词: 区别 , ls

以前见过AndAlso,但一直都没有放在心上,也没有查资料看看它们之间到底是什么关系。

今天一看,才发现使用它们的效果是不一样的,原以为And 就和C++中的 && 一个样子(都是短路的),没想到And不短路,而AndAlso才是短路的。看来以后是该用AndAlso的就用AndAlso,该用And的就用And 。

e.g.
        Dim i As Int32
        Dim s() As String

        i = 0

        If i = 1 AndAlso s(1) = "1" Then
            MessageBox.Show("不可能到这里")
        Else
            MessageBox.Show("AndAlso可以短路啊")
        End If

        If i = 1 And s(1) = "1" Then       '错误 其他信息: 未将对象引用设置到对象的实例。
            MessageBox.Show("不可能到这里")
        Else
            MessageBox.Show("也不可能到这里")
        End If

OrElse类似

以下是MSDN上的说明

短路运算符

逻辑运算符 AndAlsoOrElse 表现称为“短路”的行为。短路运算符首先计算左侧表达式。如果左侧表达式使整个表达式为假(在 AndAlso 中)或验证(在 OrElse 中)整个表达式,则程序执行过程继续,而不计算右侧表达式。请见下面的示例:

If 45 < 12 AndAlso MyFunction(3) = 81 Then ' Add code to continue execution.

在此示例中,运算符计算左侧表达式 45 < 12。因为此表达式计算为 False,所以整个逻辑表达式计算为 False。程序执行过程因此开始执行 If 块内的代码,而不计算右侧表达式 MyFunction(3)。在此示例中,永远不调用 MyFunction(),因为左侧表达式使整个表达式为假。

同样,如果使用 OrElse 的逻辑表达式中左侧表达式计算为 True,则执行过程继续下一行代码,而不计算第二个表达式,因为第一个表达式已经启用整个表达式。

相反,当使用逻辑运算符 AndOr 时,逻辑运算符的两侧都要计算。例如,请考虑下面的表达式:

If 45 < 12 And MyFunction(3) = 81 Then ' Add code to continue execution.

在此示例中,对 MyFunction() 进行调用,即使第一个表达式计算为 False

AndAlso 运算符

对两个表达式执行简化逻辑合取。
备注
如果编译的代码可以根据一个表达式的计算结果跳过对另一表达式的计算,则将该逻辑运算称为“短路”。如果第一个表达式的计算结果可以决定运算的最终结果,则不需要计算另一个表达式,因为它不会更改最终结果。如果跳过的表达式很复杂或涉及过程调用,则短路可以提高性能。
示例
本示例使用 AndAlso 运算符对两个表达式执行逻辑合取。结果是一个 Boolean 值,它表示整个联合表达式是否为真。如果第一个表达式为 False,则不计算第二个表达式。
Dim A As Integer = 10
Dim B As Integer = 8
Dim C As Integer = 6
Dim myCheck As Boolean
myCheck = A > B AndAlso B > C   ' True.
myCheck = B > A AndAlso B > C   ' False. Second expression not evaluated.
myCheck = A > B AndAlso C > B   ' False. Second expression evaluated.

共2页  1 2


 
 
标签: 区别 , ls 打印本文
 
 
  热点搜索
 
 
 



Valid XHTML 1.0 Transitional
Copyright ©2005 - 2008 Rdxx.Com,All Rights Reserved
收藏本页
收藏本站