2011-10-23 53 views
0

我必须编辑一些代码,它具有一个SuggestedDate(作为一个称为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; 
       } 
      } 
     } 

显然这里有一个重复的模式,我想弄清楚清理此代码,使其优雅的最佳途径。

回答

4

不需要递归。你可以在循环中做到这一点。

while(blackoutDates.Contains(minData)){ 
    minData = minData.AddDays(1); 
    ++dataOffset; 
} 

我不知道这是什么语言,但检查是否已经有一个标准的API来做你最先需要的东西。

+1

+1;检查标签:他们的代码是在C# –

+0

哦,对,谢谢。 – dchhetri

1

我不会让它递归。我想使它成为一个while循环:

while(blackoutDates.Contains(minDate)) 
{ 
    minDate = minDate.AddDays(1); 
    dateOffset = dateOffset + 1; 
} 

递归可以表达环路,但在他们设计的环境中使用时的循环结构通常是清晰的。它们也使得达到循环范围之外的数据比递归(特别是局部变量)要简单一些。

相关问题