为了账号安全,请及时绑定邮箱和手机立即绑定

(OrElse和Or)和(AndAlso和And)-何时使用?

(OrElse和Or)和(AndAlso和And)-何时使用?

慕侠2389804 2019-11-04 09:46:05
(OrElse和Or)和(AndAlso和And)有什么区别?他们的表现有什么不同,可以说正确性好处吗?有没有我不应该使用OrElse和AndAlso的情况?
查看完整描述

3 回答

?
心有法竹

TA贡献1866条经验 获得超5个赞

Or/And将始终评估双方1个表达式,然后返回结果。它们不是短路的。


OrElse/AndAlso是短路。仅当无法仅通过对左表达式的评估无法确定结果时,才对右表达式进行评估。(这意味着:OrElse仅当左表达式为false AndAlso时才评估右表达式,并且仅当左表达式为true时才评估右表达式。)


假设表达式中没有副作用,并且表达式不相关(并且忽略了任何执行开销),则它们是相同的。


但是,在许多情况下,表达式是从属的。例如,当列表不是-Nothing且具有多个元素时,我们想做一些事情:


If list IsNot Nothing AndAlso list.Length > 0 Then .. 'list has stuff

这也可以用来避免“昂贵”的计算(或副作用,!):


If Not Validate(x) OrElse Not ExpensiveValidate(x) Then .. 'not valid

就个人而言,我发现,AndAlso和OrElse是正确的运营商都使用,但在1% -或更小,有希望!- 需要副作用的情况。


快乐的编码。


1在第一个表达式中引发异常将阻止对第二个表达式进行求值,但这并不奇怪。


查看完整回答
反对 回复 2019-11-04
?
白板的微信

TA贡献1883条经验 获得超3个赞

除了其他答案中提到的短路外,Or/ And还可用作OrElse/ AndAlso而不是/的按位运算符。按位操作包括组合Flags枚举的值,例如FileAttributes枚举,在该枚举中您可能表示文件是只读的,并且被隐藏FileAttributes.ReadOnly Or FileAttributes.Hidden


查看完整回答
反对 回复 2019-11-04
?
慕工程0101907

TA贡献1887条经验 获得超5个赞

区别在于OrElse和AndAlso将基于第一个条件发生短路,这意味着如果不通过第一个条件,则将不评估第二个(或更多个)条件。当其中一个条件可能比另一个条件更为密集时,这特别有用。


哪里Or很好的示例(同时评估了两个条件):


If Name = "Fred" Or Name = "Sam" Then

评估它们的方式真的无关紧要


以下AndAlso是有用的,因为第二个条件可能会失败


If Not SomeObject Is Nothing AndAlso CheckObjectExistsInDatabase(SomeObject) Then

这使第一个条件可以检查是否已设置对象,并且只有在设置了对象之后,才可以检查数据库(或其他任务)。如果这是一个普通And关键字,则将对两个关键字都进行评估。


查看完整回答
反对 回复 2019-11-04
  • 3 回答
  • 0 关注
  • 824 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信