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 = < > <= >= <& ...
随机推荐
- spring注解总结
• @Controller 表示 负责注册一个bean 到spring 上下文中,bean 的ID 默认为类名称开头字母小写,表示某类是一个控制器组件 • @Service 表示负责注册一个bea ...
- C#基础,C#基础知识点,基础知识点迅速巩固
一.方法(结构.数组.冒泡排序.3个参数重载) 1将string转换为int类型 Convert.ToInt32(); int.Parse() ; int.TryParse()三种方式. 2 结构:可 ...
- ConcurrentAsyncQueue 2014-09-07
#define NET45 namespace Test { using System; using System.Threading; using System.Threading.Tasks; u ...
- 更改pip安装源的镜像解决安装总是timeout的情况
由于国外的pip源总是由于各种原因不能被访问或者网速过慢,而造成的timeout错误 解决方法是修改pip的配置文件(如果没有配置文件在相应的地方新建,配置文件的路径和名字参考这里),设置安装包时候访 ...
- 对于挑战书上的很久之前都看不懂的DP看懂的突破
突破一..牢记问题概念 并且牢记dp状态方程 突破二..一直有一个求和dp转化成O1dp递推的式子看不懂.. 看不懂的原因是..没有分清求和符号作用的范围 提醒:以后遇到求和符号一定明确其求和的式子的 ...
- HashMap两种遍历方式的深入研究
转自:http://swiftlet.net/archives/1259 HashMap的遍历有两种方式,如下所示:第一种利用entrySet的方式: 1 2 3 4 5 6 7 Map map ...
- 【CentOS】安装RPM包或者源码包
一.rpm (是Redheat Package Manager的简称) 如果光驱中还有系统安装盘的话, 1.先挂载光驱, mount /dev/cdrom /mnt/ 2.cd /mnt/ 3.cd ...
- centos下编译安装lnmp
centos下编译安装lnmp 本文以centos为背景在其中编译安装nginx搭建lnmp环境. 编译安装nginx时,需要事先安装 开发包组"Development Tools" ...
- ubuntu14.04+nvidia driver+cuda8+cudnn5+tensorflow0.12
文章在简书里面编辑的,复制过来貌似不太好看,还是到简书的页面看吧: http://www.jianshu.com/p/c89b97d052b7 1.安装环境简介: 硬件: cpu:i7 6700k g ...
- 配置gradle.properties
在一些项目中会分拆app 和 lib , 这时候引用support的时候,一旦更改版本会出现需要同步更改两个地方的问题.这种情况,可以通过配置gradle.properties实现替换. 在项目编译过 ...