用&&​​链接方法

Stu*_*ing 4 .net c# boolean-operations

我有一堆方法都返回bool.

如果一个方法返回false,则调用以下方法没有任何价值,特别是因为其中一些方法是"昂贵的"操作.

哪个更有效率?

bool result = method1();
if (result) result = method2();
if (result) result = method3();
return result;
Run Code Online (Sandbox Code Playgroud)

要么

return method1() && method2() && method3();
Run Code Online (Sandbox Code Playgroud)

据我所知,第二种形式应该在其中一种方法返回false时停止评估,对吧?

Mah*_*eep 9

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

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

这篇非常好的语言独立文章关于维基百科上的短路运营商.

更新: 在C#中,如果要使用没有短路的逻辑运算符,请使用&和| 而不是运营商