首页 程序笔记 AndAlso OrElse和And Or的区别

AndAlso OrElse和And Or的区别

短路运算符

逻辑运算符 AndAlso 和 OrElse 表现称为“短路”的行为。短路运算符首先计算左侧表达式。如果左侧表达式使整个表达式为假(在 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,则执行过程继续下一行代码,而不计算第二个表达式,因为第一个表达式已经启用整个表达式。

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

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.

Public Function FindValue(ByVal Arr() As Double, _

                          ByVal SearchValue As Double) As Double

   Dim I As Integer = 0

   While I <= UBound(Arr) AndAlso Arr(I) <> SearchValue

   ' If I is greater than UBound(Arr), SearchValue is not checked.

      I += 1

   End While

   If I >= UBound(Arr) Then I = –1

   Return I

End Function

OrElse 运算符

用于对两个表达式执行短路逻辑析取。

备注

如果编译的代码可以根据一个表达式的计算结果跳过对另一表达式的计算,则将该逻辑运算称为“短路”。如果第一个表达式的计算结果可以决定运算的最终结果,则不需要计算另一个表达式,因为它不会更改最终结果。如果跳过的表达式很复杂或涉及过程调用,则短路可以提高性能。

示例

本例使用 OrElse 运算符对两个表达式执行逻辑析取。结果是一个 Boolean 值,它表示两个表达式中是否有一个为真。如果第一个表达式为 True,则不计算第二个表达式。

Dim A As Integer = 10

Dim B As Integer = 8

Dim C As Integer = 6

Dim myCheck As Boolean

myCheck = A > B OrElse B > C   ' True. Second expression is not evaluated.

myCheck = B > A OrElse B > C   ' True. Second expression is evaluated.

myCheck = B > A OrElse C > B   ' False.

If MyFunction(5) = True OrElse MyOtherFunction(4) = True Then

' If MyFunction(5) is True, MyOtherFunction(4) is not called.

   ' Insert code to be executed.

End If

下面来看看And 和 Or

And 运算符

对两个 Boolean 表达式执行逻辑合取,或对两个数值表达式执行按位合取。

注意   由于逻辑/位运算符的优先级低于其他算术和关系运算符的优先级,所以应该将任何按位运算括在括号中以确保准确执行。如果操作数包括一个 Boolean 表达式和一个数值表达式,则结果 Boolean 表达式将转换为数值(-1 表示 True,0 表示 False),最终将进行按位运算。

Or 运算符

用于对两个 Boolean 表达式执行逻辑析取,或对两个数值执行按位析取。

注意   由于逻辑/位运算符的优先级低于其他算术和关系运算符的优先级,所以应该将任何按位运算括在括号中以确保准确执行。如果操作数包括一个 Boolean 表达式和一个数值表达式,则结果 Boolean 表达式将转换为数值(-1 表示 True,0 表示 False),最终将进行按位运算。

站心网

短路运算符逻辑运算符 AndAlso 和 OrElse 表现称为“短路”的行为。短路运算符首先计算左侧表达式。如果左..

为您推荐

在 Javascript 中 声明时用 var 与不用 var 的区别

avascript 声明变量的时候,虽然用 var 关键字声明和不用关键字声明,很多时候运行并没有问题,但是这两种方式还是有区别的。可以正常运行的代码并不代表是合适的代码。var num = 1;是在当前域中声明变量。如果在方..

float 与 double 类型区别

float 单精度浮点数在机内占 4 个字节,用 32 位二进制描述。double 双精度浮点数在机内占 8 个字节,用 64 位二进制描述。浮点数在机内用指数型式表示,分解为:数符,尾数,指数符,指数四部分。数符占 1 位二进制..

CPU、GPU 和 TPU 之间有什么区别?

什么是 CPU、GPU 和 TPU?它们都是用于计算任务的处理器芯片。可以把你的大脑想象成一台计算机,能够完成诸如阅读书籍或解决数学问题的任务。每一项活动都类似于一个计算任务。例如,当你用手机拍照、发送短信或打开..

ASP.NET MVC与Web Forms的区别

ASP.NET MVC 和 ASP.NET Web Forms 是 .NET 平台上用于构建 Web 应用程序的两种不同开发模式。它们在架构、开发方式和适用场景上有显著区别。1. 架构模式ASP.NET Web Forms:基于事件驱动的控件模型,即“页面..

C#中的String和StringBuilder的区别

在 C# 中,String 和 StringBuilder 都是用于处理字符串的类,但它们在性能、可变性和使用场景上有显著区别。1. 可变性(Mutability)String:不可变。创建后,字符串的内容就不能更改。每次对 String 执行拼接、替..

.NET C#中的IEnumerable和IEnumerator的区别

在 .NET 中,IEnumerable 和 IEnumerator 是与集合迭代相关的两个接口,但它们的职责和用途有所不同。简单来说,IEnumerable 是集合的抽象,用于使集合可以被枚举;而 IEnumerator 则负责具体的枚举操作,实现实际的..

MySQL 5.x和MySQL 8.x数据库的区别

MySQL 是开源关系型数据库的代表,广泛应用于不同规模的 Web 和企业应用中。从 MySQL 5.x 到 MySQL 8.x 的升级带来了大量功能改进和性能提升。为了帮助大家更直观地理解两者的区别,本文将通过详细介绍并结合实际的 ..

C# Const 和 ReadOnly的区别

C#中的const和readonly虽然都能用于定义常量,但它们之间存在一些关键的区别。以下是具体分析:初始化位置const:必须在声明的同时赋值。这意味着const变量的值在编译时就已经确定。readonly:可以在声明处或构造函..

Asp.Net Core进程内托管 和 进程外托管的区别

在ASP.NET Core中,托管模型决定了应用程序如何运行及其与Web服务器交互的方式。主要有两种托管模式:进程内托管(In-Process Hosting)和进程外托管(Out-of-Process Hosting)。每种模式都有其独特的优势和适用场..

数据库SQL Server2014和SQL Server2019的区别和如何选择?

SQL Server 2014和SQL Server 2019是微软公司发布的两个版本的数据库管理系统,它们在性能、安全性以及可扩展性等方面各有特点。在选择这两个数据库版本时,需要根据系统需求、预算状况以及技术团队的熟悉程度等因素..

ViewData和ViewBag的区别,ViewData和ViewBag哪个更好

ViewData是Key/Value字典集合,从Asp.net MVC 1 就有了,是基于Asp.net 3.5 framework的,ViewData比ViewBag快,在ViewPage中查询数据时需要转换合适的类型。 而ViewBag是dynamic类型对像,是从ASP.NET MVC3 才有的..

Parallel.For和普通For的区别

Parallel类是.NET 4中新增的抽象线程类。Parallel.For()方法类似于C#的for循环语句,也是多次执行一个任务。但是使用Parallel.For()方法,可以并行运行。对于Parallel.For、Parallel.Foreach的使用应该要特别小心,..

Blazor的5种render-mode的区别

Blazor 是一个基于 .NET 平台的 Web 应用程序开发框架,它支持多种渲染模式,包括:Server:在服务器端执行应用程序逻辑和 UI 渲染,然后通过 SignalR 技术将 UI 更新推送到客户端。这种模式适合于需要与后端服务器..

什么是微服务架构?它与单体应用程序架构有什么区别?如何在.NET中实现微服务架构?

微服务架构是一种软件架构风格,通过将应用程序拆分为一组小型、自治的服务来构建应用程序。每个服务都专注于解决特定的业务功能,并通过轻量级的通信机制进行交互。这些服务可以独立开发、部署和扩展,可以使用不同..

解释一下MVC(Model-View-Controller)和MVVM(Model-View-ViewModel)模式,并比较它们之间的区别。

MVC(Model-View-Controller)和MVVM(Model-View-ViewModel)是两种常见的软件架构模式,用于组织和分离应用程序中的不同部分。它们有一些相似之处,但也有一些明显的区别。MVC模式Model(模型):负责处理应用程序..

.NET Core和Framework的区别?

.NET Core和.NET Framework是微软开发的两个不同的软件开发平台,用于构建Windows应用程序和服务。它们有一些重要的区别:跨平台支持.NET Core 专注于跨平台支持,可以在Windows、Linux和macOS等多种操作系统上运行..

c#和f#的区别

C#和F#是两种不同的编程语言,它们有一些区别。应用领域:C#是一种面向对象编程语言,主要用于开发Windows应用程序、Web应用程序和游戏等。F#是一种函数式编程语言,主要用于开发科学计算、金融计算、并行编程等。语..

.NET8和.NET6的区别有哪些?

.NET 8 是 .NET 框架的最新版本,于 2023 年 11 月 8 日发布。它是 .NET 6 的继任者,在 .NET 6 的基础上进行了许多改进和新功能。主要区别新的编程语言特性:.NET 8 引入了许多新的编程语言特性,包括:结构化属性..

C# .NET MAUI和WPF的区别

C# .NET MAUI 和 WPF 都是用于创建跨平台 UI 应用程序的框架。它们都具有自己的优点和缺点,适用于不同的应用程序场景。.NET MAUI 优点:跨平台:可以创建运行在 Windows、macOS、iOS 和 Android 上的应用程序。现代..

C# object和dynamic类型的区别

在C#中,object和dynamic类型都被用作存储任何类型的数据,但它们的行为和用途有一些关键差异。下面是它们之间的主要区别:类型安全:object类型:是类型安全的。当你将一个变量声明为object类型,编译器会在编译时..

发表回复

返回顶部