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

'**模 块 名: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. Linux系统开机默认开启无线网卡

    Linux系统每次重新启动时,不会重新打开无线网卡,需要每次手动去更改. 这里通过两种方式开启无线网卡. 第一种方式就是手动连接到Linux系统,(前提是按照了Linux桌面) 1.找到文件夹为 et ...

  2. DOCKER 为新启用的容器配置外网IP

    网卡的配置文件存储在 /etc/sysconfig/network-scripts/ 目录下.每个网卡的详细内容将会以不同的名字存储,比如ifcfg-enp0s3. 让我们看下ifcfg-enp0s3 ...

  3. iOS 字符串删除 DOM

    iOS  string 删除 包含的 DOM NSMutableString *mutableString = [NSMutableString stringWithString:responseSt ...

  4. Objective-C歌词解析

    #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { FILE* fp1;//定义文件指针 ...

  5. HTTrack 网站备份工具

    HTTrack可以克隆指定网站-把整个网站下载到本地.可以用在离线浏览上,免费的噢! 强大的Httrack类似于搜索引擎的爬虫,也可以用来收集信息.记得之前写过篇http://www.cnblogs. ...

  6. CozyRSS开发记录8-解析一份RSS

    CozyRSS开发记录8-解析一份RSS 1.使用Rss20FeedFormatter解析RSS 使用Rss20FeedFormatter配合XmlReader来解析RSS非常的简单,几行搞定: 来试 ...

  7. zeromq系列

    ZeroMQ系列 之NetMQ 一:zeromq简介 二:NetMQ 请求响应模式 Request-Reply 三:NetMQ 发布订阅模式 Publisher-Subscriber 四:NetMQ ...

  8. Puppet自动化部署-安装及配置(3)

    本文介绍Puppet Master及Agent相关的安装及配置. 一. 官网下载Puppet安装YUM源 [root@puppet-master ~]# rpm -ivh https://yum.pu ...

  9. nodejs复习04

    TCP/UDP网络应用 创建TCP服务器客户端 socket套接字对象实例,是对TCP协议的一个基本封装接口 clientt套接字对象实例 //server.js var net = require( ...

  10. Python爬虫学习(11):Beautiful Soup的使用

    之前我们从网页中提取重要信息主要是通过自己编写正则表达式完成的,但是如果你觉得正则表达式很好写的话,那你估计不是地球人了,而且很容易出问题.下边要介绍的Beautiful Soup就可以帮你简化这些操 ...