すべての日付が「月の最初の月曜日」であるという意味で、1 か月離れている日付のリストがあります。場合によっては月が欠落しているため、すべての日付が連続しているかどうかを判断する関数を作成する必要があります
たとえば、これが日付のリストである場合、すべての項目が「月の最初の金曜日」であり、ギャップがないため、関数は true を返します。以下の例は true を返します。
var date = new DateTime(2013, 1, 4);
var date1 = new DateTime(2013, 2, 1);
var date2 = new DateTime(2013, 3, 1);
var date3 = new DateTime(2013, 4, 5);
var dateArray = new DateTime[]{date, date1, date2, date3};
bool isConsecutive = IsThisListConsecutive(dateArray);
以下の例では false が返されます。これらはすべて「月の最初の金曜日」でもありますが、2013 年 3 月の項目がないためです。
var date = new DateTime(2013, 1, 4);
var date1 = new DateTime(2013, 2, 1);
var date3 = new DateTime(2013, 4, 5);
var dateArray = new DateTime[]{date, date1, date3};
bool isConsecutive = IsThisListConsecutive(dateArray);
だから私は IsThisListConsecutive() メソッドの正しいロジックを理解しようとしています:
これが私の最初の試みでした:(すべての日付が同じ曜日と同じ月の週であることを前もって知っているので、探しているのは欠落しているスロットだけです)
private bool IsThisListConsecutive(IEnumerable<DateTime> orderedSlots)
{
DateTime firstDate = orderedSlots.First();
int count = 0;
foreach (var slot in orderedSlots)
{
if (slot.Month != firstDate.AddMonths(count).Month)
{
return false;
}
count++;
}
return true;
}
上記のコードは、リストがある年から別の年にまたがる場合を除いて機能します。この関数を作成するためのより良い方法と、何年にもわたる日付を処理するためにその行を書き直す方法についてアドバイスを求めたいと思いました。