【问题标题】:How can I prevent repetition of a code block ending in return? [closed]如何防止重复以返回结尾的代码块? [关闭]
【发布时间】:2020-04-16 04:07:10
【问题描述】:

我有一段代码在多个类方法中多次使用。我想把它变成一个单独的函数,但是有问题的代码块是一个带有返回的 if 语句,例如

private void method() {

    //..

    if (condition) {

            //..

        return;
    }

    //..
}

问题在于,如果我将其提取到一个单独的函数中,则返回仅适用于该函数本身,而不再适用于所讨论的类方法。处理这种情况的最佳方法是什么?

【问题讨论】:

  • 让新函数返回布尔值,如果新函数返回 false,则返回类方法。
  • 没有办法做这样的事情。您可能会尝试抛出一些Exception,这将终止调用方法的执行,但使用异常进行代码流控制是一种不好的做法。

标签: c# function dry


【解决方案1】:

一个好的解决方案是将条件代码提取到一个返回bool 的新方法中,并在每个方法中处理它。代码可能有点像这样:

private bool CheckCondition()
{
    if (!condition)  // Please recognize the NOT for this condition.
    {
        return true;
    }

    // .. your code from if statement
    return false;    
}

private void Method()
{
    if (!this.CheckCondition())
    {
        return;
    }

    // ...
}

为了完整性 - 还有另一种方法,但我不建议这样做:

private void WithCondition(Action action)
{
    if (condition)
    {
        // ..

        return;
    }

    action();
}

private void Method()
{
    void Body()
    {
        // your old method body code after your condition here
    }

    this.WithCondition(Body);
}

但这看起来很奇怪。有局部函数的用例,如工厂方法,例如对于非阻塞或某些事件处理程序。但你的情况不是一个常见的用例。

【讨论】:

  • StackOverflow 说我的问题很糟糕,但这个答案正是我所需要的,所以谢谢
猜你喜欢
  • 2020-11-22
  • 2017-05-07
  • 2023-02-23
  • 2020-11-24
  • 2016-02-11
  • 2019-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多