我有一个代码块,它在多个类方法中多次使用。我想把它变成一个单独的函数,但有问题的代码块是一个带有返回的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);
}
但这看起来很奇怪。本地函数(如工厂方法(也有用例,例如非阻塞或某些事件处理程序。但是您的案例并不是一个常见的用例。