链接方法与&&

时间:2011-12-21 08:48:42

标签: c# .net boolean-operations

我有很多方法都会返回一个bool。

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

哪个效率更高?

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

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

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

3 个答案:

答案 0 :(得分:9)

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

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

Wikipedia上有关于短路运营商的非常好的语言独立文章。

<强>更新 在C#中如果你想使用没有短路的逻辑运算符,请使用&amp;和|而不是运营商。

答案 1 :(得分:1)

是的,这两种方法是等价的。使用&amp;&amp;是使用支持变量获得相同结果的快捷方式。

答案 2 :(得分:0)

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

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