C#中的递归和返回日期

时间:2009-10-08 02:58:51

标签: c# datetime recursion

我无法使用此方法返回正确的日期。此方法的作用是获取当前日期并添加您指定的天数。因此,如果您想要下周一,它将在下周一返回。它还将日期发送到一个方法,该方法检查它是否是不允许返回的“过滤日期”之一。这一切都正常,除了递归。我想要做的是,如果日期是“过滤日期”,则再次运行相同的方法,添加天数直到达到未过滤的日期。但是会发生的事情是我在2009年10月12日通过,这是一个过滤日期,它会进行递归,添加日期并返回10/19/2009但是它看起来像是再次返回但是返回10/12/2009 。我究竟做错了什么?感谢

private static DateTime Next(DateTime current, DayOfWeek dayOfWeek, int weeksAhead)
{
    int offsetDays = dayOfWeek - current.DayOfWeek;
    if (offsetDays <= 0)
    {
        offsetDays += 7 * weeksAhead;
    }
    DateTime result = current.AddDays(offsetDays);
    //MAKE SURE RESULT IS NOT A FILTERED DATE
    if (IsFiltered(result))
    {
        Next(result, dayOfWeek, 1);

    }
    //IF IT IS, RUN NEXT AGAIN WITH AN INCREMENTAL WEEK
    return result;
}

3 个答案:

答案 0 :(得分:8)

替换

Next(result, dayOfWeek, 1);

return Next(result, dayOfWeek, 1);

您不会返回(也不存储)递归调用的结果。

答案 1 :(得分:0)

您没有在if(IsFiltered(result))语句中返回结果。 将其更改为:

if (IsFiltered(result))
{
    return Next(result, dayOfWeek, 1);
}
else
{
    return result;
}

答案 2 :(得分:0)


private static DateTime Next(DateTime current, DayOfWeek dayOfWeek, int weeksAhead)
{
    current = current
        .AddDays((current.DayOfWeek - dayOfWeek) * -1)
        .AddDays(7 * weeksAhead);

    // recursive approach
    if (IsFiltered(current))
    {
        return Next(current, dayOfWeek, 1);
    }
    else
    {
        return current;
    }

    // I prefer this approach, without recursion
    while(IsFiltered(current))
        current = Next(current, dayOfWeek, 1);
    return current;
}