2011-10-23 11 views
0

提案された日付(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; Thoはタグをチェックする:そのコードはC#である –

+0

ああ、ありがとう。 – dchhetri

1

私はそれを再帰的にしません。

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

再帰はループを表現することができますが、彼らはのために設計されているコンテキストで使用する場合ループ構造は、通常は明確です:私はそれwhileループになるだろう。また、再帰よりもループの範囲外にあるデータ(具体的にはローカル変数)に到達するのが少し簡単になります。

関連する問題