使用 && 链接方法

发布于 2024-12-22 17:52:55 字数 372 浏览 1 评论 0原文

我有很多方法都返回一个布尔值。

如果一个方法返回 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

信仰 2024-12-29 17:52:55

是的你是对的。两者&&和|| 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.

愛放△進行李 2024-12-29 17:52:55

是的,这两种方法是等效的。使用 &&是达到与使用支持变量相同结果的快捷方式。

Yes, the two methods are equivalent. Using && is a shortcut to achieve the same result as using a backing variable.

↘紸啶 2024-12-29 17:52:55

第二个将在第一个表达式求值为 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文