我必须编辑一些具有proposedDate的代码(作为名为minDate的DateTime对象)和一个禁止日期数组。给定建议的日期,它会尝试查看这是否有效(不是限制日期)。如果是停电日期,请继续检查第二天,直到找到不是有效结帐日期的日期。现有代码如下所示
if ( blackoutDates.Contains(minDate))
{
minDate = minDate.AddDays(1);
dateOffset = dateOffset + 1;
if ( blackoutDates.Contains(minDate))
{
minDate = minDate.AddDays(1);
dateOffset = dateOffset + 1;
if (blackoutDates.Contains(minDate))
{
minDate = minDate.AddDays(1);
dateOffset = dateOffset + 1;
}
}
}
显然这里有一个重复的模式,我试图找出清理此代码并使其优雅的最佳方法。
答案 0 :(得分:4)
无需递归。你可以循环执行此操作。
while(blackoutDates.Contains(minData)){
minData = minData.AddDays(1);
++dataOffset;
}
我不知道这是什么语言,但请检查是否已经存在标准API以便首先执行您需要的操作。
答案 1 :(得分:1)
我不会让它递归。我会把它变成while
循环:
while(blackoutDates.Contains(minDate))
{
minDate = minDate.AddDays(1);
dateOffset = dateOffset + 1;
}
递归可以表示循环,但循环结构在用于它们的上下文时通常更清晰。它们使得到达循环范围之外的数据比递归(特别是局部变量)更简单。