我有很多方法都会返回一个bool。
如果一个方法返回false,则调用以下方法没有任何价值,特别是因为其中一些方法是“昂贵的”操作。
哪个效率更高?
bool result = method1();
if (result) result = method2();
if (result) result = method3();
return result;
或
return method1() && method2() && method3();
据我所知,第二种形式应该在其中一种方法返回false时停止评估,对吗?
答案 0 :(得分:9)
是的,你是对的。 &&和|| c#中的布尔运算符用作短路运算符。一旦确定其值,它就停止计算表达式。它停止不必要的执行。
因此,return method1() && method2() && method3();
是您案例中更好的选择。如果您在非评估语句中有某些内容,例如在您的情况下使用method3,则可能会导致一些副作用。
Wikipedia上有关于短路运营商的非常好的语言独立文章。
<强>更新强> 在C#中如果你想使用没有短路的逻辑运算符,请使用&amp;和|而不是运营商。
答案 1 :(得分:1)
是的,这两种方法是等价的。使用&amp;&amp;是使用支持变量获得相同结果的快捷方式。
答案 2 :(得分:0)
第二个表达式在评估为第一个表达式后将停止表达式评估。
尽管两个示例在语义上都是等效的,但第二个示例在我的opionion中更具可读性。