4

我有一堆方法都返回一个布尔值。

如果一种方法返回 false,则调用以下方法没有任何价值,尤其是其中一些是“昂贵”的操作。

哪个更有效率?

bool result = method1();
if (result) result = method2();
if (result) result = method3();
return result;

或者

return method1() && method2() && method3();

据我了解,一旦其中一种方法返回false,第二种形式就应该停止评估,对吗?

4

3 回答 3

9

是的你是对的。&&和 || c# 中的布尔运算符用作短路运算符。一旦确定了表达式的值,它就会停止计算表达式。它停止不必要的执行。

因此return method1() && method2() && method3();,在您的情况下是更好的选择。如果您在非评估语句中有某些内容,请在您的情况下说 method3,它可能会导致一些副作用。

维基百科上有一篇关于短路运算符的非常好的语言独立文章。

更新: 在 C# 中,如果您想使用没有短路的逻辑运算符,请使用 & 和 | 运算符。

于 2011-12-21T08:50:38.300 回答
1

是的,这两种方法是等价的。使用 && 是实现与使用后备变量相同结果的捷径。

于 2011-12-21T08:51:51.703 回答
0

第二个将在第一个表达式被评估为 false 后停止表达式评估。

尽管这两个示例在语义上是等效的,但在我看来,第二个示例更具可读性。

于 2011-12-21T08:55:17.237 回答