Рекурсивно добавить значение, если в пределах диапазона - PullRequest
0 голосов
/ 30 апреля 2019

Я уверен, что это должно быть действительно просто, но я не могу заставить это работать.По сути, я хочу проверить, выпадает ли дата на выходные или праздничные дни, и если это так, то добавить день к дате и проверять снова и так до тех пор, пока дата не упадет на одно из этих двух значений, а затем вернуть дату.Итак, у меня есть:

    private static DateTime isBankHoliday(DateTime myDate)
    {

        if (DateSystem.IsPublicHoliday(myDate, CountryCode.GB) || DateSystem.IsWeekend(myDate, CountryCode.GB))
        {
            isBankHoliday(myDate.AddDays(1));
        }
        else
        {
            return myDate;
        }

        return myDate;
    }

И я вызываю эту функцию

var myNewDate = isBankHoliday(date);

Так, например, я передаю 5 мая 2019 года (воскресенье) рутинные проверки, а затем добавляю день кдата становится 6-ой и снова проверяется, но где-то вдоль строки затем возвращается дата и снова возвращается 5-ая.

Очевидно, я где-то допустил какую-то базовую ошибку, но просто не вижу, может ли кто-то помочьпожалуйста?

В качестве заметки я использую библиотеку дат Нагара.

Спасибо, C

Ответы [ 2 ]

3 голосов
/ 30 апреля 2019

Вы пропускаете return в операторе if, и в конце функции вы получили неправильный оператор return.Должно быть:

private static DateTime isBankHoliday(DateTime myDate)
{

    if (DateSystem.IsPublicHoliday(myDate, CountryCode.GB) || DateSystem.IsWeekend(myDate, CountryCode.GB))
    {
        return isBankHoliday(myDate.AddDays(1));
    }
    else
    {
        return myDate;
    }
}
2 голосов
/ 30 апреля 2019

Вам важно делать это рекурсивно? Вы можете сделать это проще с помощью цикла while:

private static DateTime isBankHoliday(DateTime myDate)
{
    while (DateSystem.IsPublicHoliday(myDate, CountryCode.GB)
            || DateSystem.IsWeekend(myDate, CountryCode.GB))
    {
        myDate = myDate.AddDays(1);
    }

    return myDate;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...