2011-12-21 96 views
4

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

如果一个方法返回false,那么在调用下面的方法时没有价值,特别是当它们中的一些是“昂贵的”操作时。

哪个效率更高?

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

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

据我了解,2号形式应停止尽快的方法之一返回false,正确评估?

回答

9

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

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

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

UPDATE: 在C#中,如果你想使用逻辑运算符不短路,使用&和|代替。

+0

谢谢你,尤其是,指向维基百科文章的指针。 – 2011-12-21 09:01:53

1

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

+0

谢谢你。 – 2011-12-21 09:03:18

+0

这是错误的,&&不是调用,存储,测试。 &运算符将是相同的。 – RSinohara 2016-05-19 07:25:30

0

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

虽然这两个例子在语义上是等价的,但第二个例子在我的opionion中更具可读性。