3

我想使用提供的频率获取两个端点之间的所有日期。所以我的方法基于这个简单的代码:

for (DateTime date = startDate; date <= endDate; date = date.AddDays(1))
            datesBetween.Add(date);

现在,我有时需要添加天数(如上)、添加月数或添加年数FrequencyEnum

所以我可以使用 aswitch并重复代码 3 次以供我使用,但我想知道我是否可以分配一个委托扩展方法而不是.AddDaysor .AddMonthsor.AddYears

相反,我想做这样的事情:

for (DateTime date = startDate; date <= endDate; date = date.AddFrequency)
            datesBetween.Add(date);

代表在哪里.AddFrequency定义我的频率所需的扩展方法。

或者,我不能使用扩展方法,而只是使用带有日期参数并根据需要返回的函数。

4

2 回答 2

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);
于 2013-04-12T15:21:42.410 回答
1

不,你不能那样做。扩展方法必须是静态类中的静态方法。

但是您可以编写一个AddFrequency采用频率和计数的扩展方法。所以你可以写:

date = date.AddFrequency(FrequencyEnum.Months, 3)
于 2013-04-12T15:19:35.403 回答