0

可能重复:
如果第一个为假,编译器是否继续评估所有必须为真的表达式?
急切操作和短路操作的区别?(| 与 || 和 & 与 &&)

所以这是我的问题。如果我有这个

if (Foo() && Bar())
    DoStuff();

如果 Foo() 返回 false,它还会运行 Bar() 吗?还是我需要

if (Foo())
    if (Bar())
        DoStuff();

以确保它仅在“失败”之前运行所需的最低金额?

4

3 回答 3

3
if (Foo() && Bar())

在这种情况下(逻辑与),它将首先检查返回值,并且只有在返回 true时才Foo()会这样做。简单地说,如果任何一个条件为假,那么它不会检查其他条件,它会从左到右检查条件。Bar()Foo()

于 2012-06-26T16:53:00.590 回答
2

不,如果返回 false ,Bar()则不会被评估。Foo()这是 C#&&运算符的一个特性(不限于if语句):

条件与运算符 (&&) 对其布尔操作数执行逻辑与,但仅在必要时评估其第二个操作数。

于 2012-06-26T16:56:37.447 回答
1

您正在寻找的是所谓的“短路”,是的,.Net支持它。

于 2012-06-26T16:53:44.533 回答