'*************************************************************************

'**模 块 名:VB.net 2010 AndAlso,OrElse和And,Or的区别
'**说    明:蓝凤凰设计商城 浴火凤凰-郭卫 | 蓝凤凰-魔灵 | 郭卫-icecept
'**创 建 人:浴火凤凰-郭卫
'**日    期:2015年10月11日  12:00:13
'**修 改 人:浴火凤凰-郭卫
'**日    期:
'**描    述:QQ:493405998 | 微信\旺旺:icecept
'**版    本:V1.0.0 | http://blog.sina.com.cn/icecept
'*************************************************************************

AndAlso和OrElse应该是vb.net引入的新运算符。
AndAlso,OrElse相对于and,or最大的特性是会自动实现“最短路径”。
所谓“最短路径”就是指:当第一个被比较的运算式的结果已经能决定运算的最终结果时,就不会再去比较其他运算式,因此可以避免掉额外且不需要的比较运算式。举个很简单的例子说明下: 
1 Dim a As Int16 = 1
2 Dim b As Int16 = 2
3
4 '用or的话,a=1,b=2都会被比较
5 If a = 1 Or b = 2 Then
6 'xxxxx
7 End If
8
9 '用OrElse的话,只比较了第一个条件a=1
10 If a = 1 OrElse b = 2 Then
11 'xxxx
12 End If
当用or的时候,a=1和b=2这2个条件,都会被判断。而用orelse,则当前面一个条件(a=1)已经能决定最终结果的话,程序就不会在判断第二个条件(b=2)了。类似的情况还有:
1 Dim a As Int16 = 1
2 Dim b As Int16 = 2
3
4 '用and的话,a=999,b=2,(a + b) * (b - a) = 3 都会被比较
5 If a = 999 And b = 2 And (a + b) * (b - a) = 3 Then
6 'xxxxx
7 End If
8
9 '用AndAlso的话,只比较了第一个条件a=999,由于已经是false了,所以后面的运算式不再判断
10 If a = 999 AndAlso b = 2 AndAlso (a + b) * (b - a) = 3 Then
11 'xxxx
12 End If
当出现以上情况时,AndAlso和OrElse的效率要高于and,or。
综上所述: andalso 只要第一个判断式不成立,则后面的运算符将不再判断
orelse 只要第一个判断式成立,则后面的运算符将不再判断,如果第一个判断式不成立,则继续执行第二个判断式,以次类推。

Private Sub Button10_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button10.Click
        Dim i As Int32
        For i = 1 To 20
            '当第一个条件不成立,AndAlso后面的表达式将不执行。若第一个表达式成立,则进行对第二个表达式的判断
            If i < 10 AndAlso i Mod 2 = 0 Then
                Debug.Print(i & "小于10的偶数")
                '若第一个判断表达式成立,则后面的运算符将不再判断,如果第一个判断表达式不成立,
                '则继续执行第二个判断表达式 
                '以下当i<10时,第一个不成立,则去判断OrElse 后面的 i Mod 2 = 0 
                '当i>10时,第一个成立,程序将不再判断OrElse 后面的 i Mod 2 = 0
            ElseIf i > 10 OrElse i Mod 2 = 0 Then '
                Debug.Print(i & "大于10的数")
            End If
        Next
    End Sub

执行结果:

2小于10的偶数
4小于10的偶数
6小于10的偶数
8小于10的偶数
10大于10的数
11大于10的数
12大于10的数
13大于10的数
14大于10的数
15大于10的数
16大于10的数
17大于10的数
18大于10的数
19大于10的数
20大于10的数

VB.net 2010 AndAlso,OrElse和And,Or的区别的更多相关文章

  1. 自写函数VB6 STUFF函数 和 VB.net 2010 STUFF函数 详解

    '*************************************************************************'**模 块 名:自写函数VB6 STUFF函数 和 ...

  2. VB.net 2010下关联与程序图标设置

    '*************************************************************************'**模 块 名:VB.net 2010下关联与程序 ...

  3. VB.NET入门 ANDALSO 和OrElse 之于 AND,OR

    Module Module1 Sub Main() Dim x As Integer = 8, y As Integer = 5, z As Integer = 3 Console.WriteLine ...

  4. VB.Net 2010中 ./和../的含义

    文件路径 文件路径就是文件在电脑(服务器)中的位置,表示文件路径的方式有两种:相对路径和绝对路径. Windows由于使用 斜杆/ 作为DOS命令提示符的参数标志了,为了不混淆,所以采用 反斜杠\ 作 ...

  5. 在 vb中 "end","unload me","exit sub" 之间的区别

    之前就想过这个问题,这么熟悉的几个东西居然对他们分析的不是很透彻. “End”  跟  “Unload  Me”  在敲程序 的时候经常敲到,“exit  sub”  更是熟悉,下面,解析: End  ...

  6. VB.NET vs. C#

    VB.NET Program Structure C# Imports System Namespace Hello    Class HelloWorld        Overloads Shar ...

  7. C# 与 VB.NET 对比

    C# 与 VB.NET 对比 2008-06-20 15:30 by Anders Cui, 1462 阅读, 3 评论, 收藏, 编辑 Table of Contents 1.0       Int ...

  8. VB.NET and C# 差异

    VB.NET Program Structure C# Imports System Namespace Hello    Class HelloWorld       Overloads Share ...

  9. vb.net 与 c# 运算符区别

    vb.net vs c# 详细的Operators运算符区别 vb.net ===================== Comparison = < > <= >= <& ...

随机推荐

  1. MySQLFabric连接的编码问题

    今天解决的一个小问题.最终的解决方案很简单,主要是讲一下解决问题的思路. 测试人员在服务器上测试,页面提交的中文内容存入数据库中以后,是乱码. 开发人员在本机上测试,没有问题. 服务器上使用的是Mys ...

  2. Vue.js介绍样码

    了解一下,其它的什么SASS,COMPASS,WEBPACK,VUE.JS都看看,了解一下前端开发的一些知识点吧. <!DOCTYPE html PUBLIC "-//W3C//DTD ...

  3. C语言的可变参数在Linux(Ubuntu)与Windows下注意点

    基本上C语言的可变参数原理在不同平台和不同编译器下基本类似(通过函数入栈,从右向左,从高位到低位地址),不过部分实现会有所不同:在使用中需要注意的是: va_list 为char 类型指针,部分调用如 ...

  4. SOUI Editor使用教程

    感谢网友"指尖"为SOUI开发的UiEditor, 目前该UI编辑器已经基本可用, 源代码在soui svn demos\uieditor. 下面是"指尖"提供 ...

  5. IBatis.Net使用总结(四)-- IBatis 调用存储过程

    IBatis 调用存储过程 http://www.cnblogs.com/jeffwongishandsome/archive/2010/01/10/1543219.html http://www.c ...

  6. The specified type member 'Date' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties

    出现这个错误提示可以用 DbFunctions.TruncateTime 将Linq中entity的DateTime转化一下再使用,如下所示: var anyCalls = _db.CallLogs. ...

  7. Mysql调整字段顺序

    1.增加(add/modify/change)一个字段使之位于第1列 alter table table_name add `id` int first; 2.增加一个字段使之位于某列后 alter ...

  8. oracle(sql)基础篇系列(五)——PLSQL、游标、存储过程、触发器

      PL/SQL PL/SQL 简介 每一种数据库都有这样的一种语言,PL/SQL 是在Oracle里面的一种编程语言,在Oracle内部使用的编程语言.我们知道SQL语言是没有分支和循环的,而PL语 ...

  9. 在Myeclipse中提交代码到GitHub中

    这需要借助插件Egit,首先就是先下载该插件了,可以再eclipse中下载,也可以在外面下载,下载就不说了.下载地址git://github.com/houyongchao/plugin-Egit.g ...

  10. ZOJ-3820 Building Fire Stations 题解

    题目大意: 一棵树,在其中找两个点,使得其他点到这两个的距离的较小值的最大值的最小值及其方案. 思路: 首先显然一棵树的直径的中点到其他点的距离的最大值必定比其他点的小. 那么感性思考一下就将一棵树的 ...