5

如果我有以下...

a OrElse b 

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

a OrElse b Or c

是否/应该对 c 进行评估?如果我放在一些括号里呢?

抱歉,如果这是基本的。当然,我可以自己测试答案,但我在这里或其他地方找不到这个问题的答案。很多关于 Or 与 OrElse 的问题,没有处理OrOrElse的问题

4

4 回答 4

5

否则左右两侧参数短路(只有2个参数)。所以我会说这C将始终被评估,因为您可以将其视为(A OrElse B) Or C.

MSDN 或其他

于 2010-09-09T14:49:59.177 回答
3

在提出的情况下,c进行评估。一个小测试会告诉你:

Debug.WriteLine(test(1) OrElse test(2) Or test(3))

Function test(ByVal a As Integer) As Boolean

    Debug.WriteLine(a)
    Return True

End Function

上面的示例输出:

1
3
真的
于 2010-09-09T15:07:04.747 回答
3

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

重要摘录:

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

包含性析取(或,OrElse

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

因此,我希望在a为 true的情况下b不进行评估。不过,c还是会的。在a为 false 的情况下,b将评估并且无论b' 的值如何, Or 运算符都会评估c。所以,是的,c总是被评估。

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

于 2010-09-09T15:21:19.440 回答
-1

以我个人的经验,VB 倾向于为所有这些获得价值,无论它们是否被实际评估。

这仅在订单对项目存在等很重要时才有用。只是想注意一下。

于 2010-09-09T14:56:25.460 回答