如何在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
是定义我的频率所需的扩展方法的委托。
或者,我可以不使用扩展方法,而只是使用一个接受日期参数并根据需要返回的函数。
我想你需要一个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)