可能重复:
如果第一个为假,编译器是否继续评估所有必须为真的表达式?
急切操作和短路操作的区别?(| 与 || 和 & 与 &&)
所以这是我的问题。如果我有这个
if (Foo() && Bar())
DoStuff();
如果 Foo() 返回 false,它还会运行 Bar() 吗?还是我需要
if (Foo())
if (Bar())
DoStuff();
以确保它仅在“失败”之前运行所需的最低金额?
可能重复:
如果第一个为假,编译器是否继续评估所有必须为真的表达式?
急切操作和短路操作的区别?(| 与 || 和 & 与 &&)
所以这是我的问题。如果我有这个
if (Foo() && Bar())
DoStuff();
如果 Foo() 返回 false,它还会运行 Bar() 吗?还是我需要
if (Foo())
if (Bar())
DoStuff();
以确保它仅在“失败”之前运行所需的最低金额?
if (Foo() && Bar())
在这种情况下(逻辑与),它将首先检查返回值,并且只有在返回 true时才Foo()
会这样做。简单地说,如果任何一个条件为假,那么它不会检查其他条件,它会从左到右检查条件。Bar()
Foo()
不,如果返回 false ,Bar()
则不会被评估。Foo()
这是 C#&&
运算符的一个特性(不限于if
语句):
条件与运算符 (&&) 对其布尔操作数执行逻辑与,但仅在必要时评估其第二个操作数。
您正在寻找的是所谓的“短路”,是的,.Net支持它。