我想使用提供的频率获取两个端点之间的所有日期。所以我的做法是基于这段简单的代码:
for (DateTime date = startDate; date <= endDate; date = date.AddDays(1))
datesBetween.Add(date);
现在,我有时需要添加天数(如上所述),添加月份或根据FrequencyEnum
所以我可以使用switch
并重复代码3次以供我使用,但我想知道我是否可以分配代理扩展方法而不是.AddDays
或.AddMonths
或.AddYears
相反,我想做这样的事情:
for (DateTime date = startDate; date <= endDate; date = date.AddFrequency)
datesBetween.Add(date);
其中.AddFrequency
是委托,用于定义频率所需的扩展方法。
或者,我可以不使用扩展方法,只需使用带日期参数的函数并根据需要返回。
答案 0 :(得分:2)
我想你想要Func<DateTime, DateTime>
Func<DateTime, DateTime> updater = d => d.AddFrequency(Frequency.Month);
for (DateTime date = startDate; date <= endDate; date = updater(date))
datesBetween.Add(date);
当然,在您的实际代码中,您的方法可能会接受委托作为参数,而不是自己初始化它。
那就是说moreLinq,你可以这样做:
var datesBetween = startDate.Generate(date => date.AddDays(1))
.TakeWhile(date => date <= endDate);
答案 1 :(得分:1)
不,你不能这样做。扩展方法必须是静态类中的静态方法。
但是你可以编写一个AddFrequency
扩展方法来获取频率和计数。所以你可以写:
date = date.AddFrequency(FrequencyEnum.Months, 3)