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

本文关键字:一个 方法 扩展 分配 | 更新日期: 2023-09-27 18:09:06

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

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

或者,我可以使用扩展方法,而只是使用一个接受日期参数并根据需要返回的函数。

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

我想你需要一个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);

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

但是你可以写一个AddFrequency扩展方法,它接受一个频率和一个计数。所以你可以写:

date = date.AddFrequency(FrequencyEnum.Months, 3)