前几天我在代码审查中遇到了一些看起来像这样的代码。
public void DoSomeTasks()
{
if (CheckSomeState()==true) return;
DoTaskOne();
if (CheckSomeState()==true) return;
DoTaskTwo();
if (CheckSomeState()==true) return;
DoTaskThree();
if (CheckSomeState()==true) return;
DoTaskFour();
}
随着任务数量的增加,代码的圈复杂度越来越高,而且我也觉得不合适。
我想出的解决方案是。
private void DoTasksWhile(Func<bool> condition, Action[] tasks)
{
foreach (var task in tasks)
{
if (condition.Invoke()==false) break;
task.Invoke();
}
}
像这样使用
public void DoSomeTasks()
{
var tasks = new Action[] {
{()=DoTaskOne()},
{()=DoTaskTwo()},
{()=DoTaskThree()},
{()=DoTaskFour()}
}
DoTasksWhile(()=>CheckSomeState(), tasks);
}
有人有任何建议可以使代码更具可读性吗?