如何在c#中分配委托扩展方法?

时间:2013-04-12 15:17:15

标签: c# delegates extension-methods

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

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是委托,用于定义频率所需的扩展方法。

或者,我可以使用扩展方法,只需使用带日期参数的函数并根据需要返回。

2 个答案:

答案 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)