使用 && 链接方法
我有很多方法都返回一个布尔值。
如果一个方法返回 false,那么调用以下方法就没有任何价值,特别是因为其中一些方法是“昂贵”的操作。
哪个更有效率?
bool result = method1();
if (result) result = method2();
if (result) result = method3();
return result;
或者
return method1() && method2() && method3();
据我了解,一旦其中一个方法返回 false,第二种形式就应该停止评估,对吗?
I have a bunch of methods that all return a bool.
If one method returns false then there is no value in calling the following methods, especially as some of them are 'expensive' operations.
Which is the more efficient?
bool result = method1();
if (result) result = method2();
if (result) result = method3();
return result;
or
return method1() && method2() && method3();
As I understand it, the 2nd form should stop evaluating as soon as one of the methods returns false, right?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
是的你是对的。两者&&和|| C# 中的布尔运算符充当短路运算符。一旦确定了表达式的值,它就会停止计算表达式。它会停止不必要的执行。
因此
return method1() &&方法2() && method3();
对于您的情况来说是更好的选择。如果您在非评估语句中有某些内容,例如您的情况下的 method3,它可能会导致一些副作用。Wikipedia 上有一篇关于短路运算符的非常好的独立于语言的文章。
更新:
在C#中,如果要使用逻辑运算符而不短路,请使用 &和|改为运算符。
Yes you are right. Both && and || boolean operators in c# work as short-circuit operator. It stops evaluating expression once its value is determined. It stops unnecessary execution.
Hence
return method1() && method2() && method3();
is better option in your case. If you have something in non-evaluated statement, say method3 in your case, it may lead to some side effects.There is this very good language independent article about short-circuit operators on Wikipedia.
UPDATE:
In C# if you want to use logical operator without short-circuit, use & and | operator instead.
是的,这两种方法是等效的。使用 &&是达到与使用支持变量相同结果的快捷方式。
Yes, the two methods are equivalent. Using && is a shortcut to achieve the same result as using a backing variable.
第二个将在第一个表达式求值为 false 后停止表达式求值。
尽管这两个示例在语义上是等效的,但我认为第二个示例更具可读性。
The second will stop the expression evaluation after the first expression is evaluated to false.
although both examples are semantically equivalent the second one is more readable in my opionion.