Как в C# сгенерировать набор дат от одной даты до дргуой даты?

В C# существует несколько способов сгенерировать набор дат от одной даты до другой. Рассмотрим несколько из них.

1. Использование цикла for:

DateTime startDate = new DateTime(2022, 1, 1);
DateTime endDate = new DateTime(2022, 12, 31);

for (DateTime date = startDate; date <= endDate; date = date.AddDays(1))
{
    Console.WriteLine(date.ToString("dd.MM.yyyy"));
}

В этом примере мы создаем две переменные startDate и endDate и инициализируем их начальной и конечной датами соответственно. Затем мы вводим цикл for, в котором переменная date начинается с startDate, и каждую итерацию увеличиваем ее на один день с помощью метода AddDays(1). В теле цикла мы выводим каждую дату в формате "dd.MM.yyyy" с помощью метода ToString(). Таким образом, цикл будет выполняться, пока date не станет больше или равным endDate, и будет выводить каждую дату в консоль.

2. Использование LINQ:

DateTime startDate = new DateTime(2022, 1, 1);
DateTime endDate = new DateTime(2022, 12, 31);

var dates = Enumerable.Range(0, (endDate - startDate).Days + 1)
                      .Select(offset => startDate.AddDays(offset));

foreach (var date in dates)
{
    Console.WriteLine(date.ToString("dd.MM.yyyy"));
}

В этом примере мы используем метод Enumerable.Range() для генерации последовательности чисел от 0 до разницы между endDate и startDate в днях. Затем мы используем метод Select() для добавления к каждому числу offset дней из startDate. Полученная последовательность dates содержит все даты от startDate до endDate. Затем мы используем цикл foreach для вывода каждой даты в консоль.

3. Использование рекурсии:

static void PrintDates(DateTime startDate, DateTime endDate)
{
    if (startDate > endDate)
        return;

    Console.WriteLine(startDate.ToString("dd.MM.yyyy"));

    PrintDates(startDate.AddDays(1), endDate);
}

// Использование:
DateTime startDate = new DateTime(2022, 1, 1);
DateTime endDate = new DateTime(2022, 12, 31);

PrintDates(startDate, endDate);

В этом примере мы определяем рекурсивный метод PrintDates(), который принимает два аргумента - начальную и конечную даты. В теле метода мы сначала проверяем условие выхода из рекурсии - если startDate стало больше endDate, то выходим из метода. Затем мы выводим startDate в консоль. Затем вызываем PrintDates() с увеличенной на один день startDate и оригинальной endDate, что приведет к рекурсивному вызову метода до тех пор, пока не будет достигнута конечная дата.

Это лишь несколько примеров того, как можно сгенерировать набор дат от одной даты до другой в C#. Выберите способ, который наиболее подходит под ваши потребности и требования, и используйте его в своем коде.