短路:OrElse与Or结合使用

haw*_*bsl 5 vb.net operator-precedence short-circuiting

如果我有以下......

a OrElse b 
Run Code Online (Sandbox Code Playgroud)

......并且a是真,那么显然b永远不会被评估.但是,如果我添加一个Or,那么呢?

a OrElse b Or c
Run Code Online (Sandbox Code Playgroud)

是否应该评估?如果我放入一些括号怎么办?

如果这是基本的,请道歉.当然我可以自己测试答案,但我无法在这里或其他地方找到这个问题的答案.的处理问题,很多还是 OrElse运算,但没有处理或者 OrElse运算

msa*_*het 5

OrElse左侧和右侧参数之间短路(仅2个参数).所以我会说,C总会对你进行评估,因为你可以将其视为(A OrElse B) Or C.

MSDN OrElse


Joe*_*orn 3

这是一个运算符优先级问题。相关文档位于:
http://msdn.microsoft.com/en-us/library/fw84t893.aspx ?ppud=4

重要摘录:

  • 具有相同优先级的运算符按照它们在表达式中出现的顺序从左到右进行计算。

包含析取 ( Or, OrElse )

所以我们在这里了解到 Or 和 OrElse 具有相同的优先级,并且具有相同优先级的运算符从左到右进行计算。

因此,我预计在a为 true 的情况下,b不会被评估。不过,c还是会的。如果a为 false,b则计算 ,并且无论 的值如何,bOr 运算符都会计算c。所以,是的,c总是被评估。

实际上,OrElse除非您有充分的理由使用Or. Or现在存在主要是为了向后兼容。