2011-10-23 32 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; 
} 

遞歸可以表達環路,但在他們設計的環境中使用時的循環結構通常是清晰的。它們也使得達到循環範圍之外的數據比遞歸(特別是局部變量)要簡單一些。

相關問題