2009-10-08 71 views
1

我無法獲得此方法返回正確的日期。這種方法做的是取當前日期並添加你指定的天數。所以如果你想下個星期一,它會在下個星期一回來。它還將日期發送到一個方法,該方法檢查是否是不允許返回的「過濾日期」之一。除了遞歸之外,這一切都可以正常工作。我想要做的是,如果某個日期是「過濾日期」,則會再次運行相同的方法,並添加天數直至達到未過濾日期。雖然說我通過2009年10月12日,這是一個過濾日期,它遞歸,增加日期和返回2009年10月19日,但它看起來像它再次返回,但返回10/12/2009 。我究竟做錯了什麼?感謝C中的遞歸和返回日期#

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; 
} 

回答

8

更換

Next(result, dayOfWeek, 1); 

return Next(result, dayOfWeek, 1); 

不必返回(也存儲)遞歸調用的結果。

0

您不會在if(IsFiltered(result))語句中返回結果。 將其更改爲:

if (IsFiltered(result)) 
{ 
    return Next(result, dayOfWeek, 1); 
} 
else 
{ 
    return result; 
} 
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; 
}