VB.net 2010 AndAlso,OrElse和And,Or的区别
'*************************************************************************
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的区别的更多相关文章
- 自写函数VB6 STUFF函数 和 VB.net 2010 STUFF函数 详解
'*************************************************************************'**模 块 名:自写函数VB6 STUFF函数 和 ...
- VB.net 2010下关联与程序图标设置
'*************************************************************************'**模 块 名:VB.net 2010下关联与程序 ...
- 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 ...
- VB.Net 2010中 ./和../的含义
文件路径 文件路径就是文件在电脑(服务器)中的位置,表示文件路径的方式有两种:相对路径和绝对路径. Windows由于使用 斜杆/ 作为DOS命令提示符的参数标志了,为了不混淆,所以采用 反斜杠\ 作 ...
- 在 vb中 "end","unload me","exit sub" 之间的区别
之前就想过这个问题,这么熟悉的几个东西居然对他们分析的不是很透彻. “End” 跟 “Unload Me” 在敲程序 的时候经常敲到,“exit sub” 更是熟悉,下面,解析: End ...
- VB.NET vs. C#
VB.NET Program Structure C# Imports System Namespace Hello Class HelloWorld Overloads Shar ...
- C# 与 VB.NET 对比
C# 与 VB.NET 对比 2008-06-20 15:30 by Anders Cui, 1462 阅读, 3 评论, 收藏, 编辑 Table of Contents 1.0 Int ...
- VB.NET and C# 差异
VB.NET Program Structure C# Imports System Namespace Hello Class HelloWorld Overloads Share ...
- vb.net 与 c# 运算符区别
vb.net vs c# 详细的Operators运算符区别 vb.net ===================== Comparison = < > <= >= <& ...
随机推荐
- 3ds max录制自定义视频
要将视频设置成未压缩才能录制出自己设定的大小,其他都是都是特定的,软件默认的一些参数.
- VS 2013编译64位版本QT 4.8.6及使用cmake为依赖QT生成VS项目时Could NOT find Qt4
对于一些已经解决的问题,本博客不再讨论.只将本人遇到的问题做简单的说明. 一.VS 2013编译64位版本QT 4.8.6 QT项目官网中,对于QT4,其只提供了windows X86的版本,并且支持 ...
- 使用简介<EntityFramework6.0>
序言 在这一篇中,我们将演示EnitityFramework基本的建模[建模也是EntityFramework最核心的特性]范例,例如实体的分离和继承等.我们开始了演示如何创建一个简单的概念模型的例子 ...
- CURL 模拟http提交
1:CURL模拟get提交 private function httpGet($url) { $curl = curl_init(); curl_setopt($curl, CURLOPT_RETUR ...
- linux 负载均衡
[博文推荐]关于负载均衡技术使用的一些误区 如今,负载均衡已经不是一个新鲜的词,也不是什么新技术,主要用于解决单机负载能力的局限性,但问题是你的应用真的到了单 机的负载上限了吗,未必,很多不知道如何推 ...
- nodejs复习05
stream 可读流 fs.pause()方法会使处于流动模式的流停止触发data事件,切换到非流动模式并让后续数据流在内部缓冲区 var fs = require('fs') var rs = fs ...
- Sprint计划
团队: 郭志豪:http://www.cnblogs.com/gzh13692021053/ 杨子健:http://www.cnblogs.com/yzj666/ 刘森松:http://www.cnb ...
- Ubuntu配置Tomcat9非root用户启动
unix类系统的root用户具有极大的权利,所以很多时候我们不希望程序以root身份启动,这也就是配置Tomcat以指定身份(非root)启动的初衷,虽然也没人来攻击我的服务器,但本着学习学习的目的, ...
- 【BZOJ3172】[Tjoi2013]单词 AC自动机
[BZOJ3172][Tjoi2013]单词 Description 某人读论文,一篇论文是由许多单词组成.但他发现一个单词会在论文中出现很多次,现在想知道每个单词分别在论文中出现多少次. Input ...
- strong,weak, retain, assign的区别
strong,weak, retain, assign的区别 strong与weak是由ARC新引入的对象变量属性 xcode 4.2(ios sdk4.3和以下版本)和之前的版本使用的是retain ...