如何防止以返回结尾的代码块重复



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

private void method() {
//..
if (condition) {
//..
return;
}
//..
}

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

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

但这看起来很奇怪。本地函数(如工厂方法(也有用例,例如非阻塞或某些事件处理程序。但是您的案例并不是一个常见的用例。

相关内容

  • 没有找到相关文章

最新更新