如何防止重复以 return 结尾的代码块?

How can I prevent repetition of a code block ending in return?

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

private void method() {

    //..

    if (condition) {

            //..

        return;
    }

    //..
}

问题是,如果我将其提取到一个单独的函数中,return 仅适用于该函数本身,而不再适用于相关的 class 方法。处理这种情况的最佳方法是什么?

一个好的解决方案是将条件代码提取到一个 returns 和 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);
}

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