【问题标题】:Chaining methods with &&用 && 链接方法
【发布时间】:2011-12-21 08:48:42
【问题描述】:

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

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

哪个效率更高?

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

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

据我了解,一旦其中一种方法返回 false,第二种形式就应该停止评估,对吧?

【问题讨论】:

    标签: c# .net boolean-operations


    【解决方案1】:

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

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

    Wikipedia 上有一篇关于短路运算符的非常好的独立于语言的文章。

    更新: 在 C# 中,如果您想使用没有短路的逻辑运算符,请使用 & 和 |运算符。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 这是错误的,&& 与调用、存储、测试不同。 & 运算符将是相同的。
      【解决方案3】:

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

      虽然这两个示例在语义上是等效的,但在我看来,第二个示例更具可读性。

      【讨论】:

        猜你喜欢
        • 2018-11-07
        • 2017-01-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多