c# - 如何在 C# 中分配委托(delegate)扩展方法?

标签 c# delegates extension-methods

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

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

现在,我有时需要根据 FrequencyEnum

添加天数(如上所述)、添加月数或添加年数

所以我可以使用 switch 并在我的使用中重复代码 3 次,但我想知道我是否可以分配委托(delegate)扩展方法而不是 .AddDays.AddMonths.AddYears

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

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

其中 .AddFrequency 是定义我的频率所需的扩展方法的委托(delegate)。

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

最佳答案

我想你想要一个 Func<DateTime, DateTime>

Func<DateTime, DateTime> updater = d => d.AddFrequency(Frequency.Month);

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

当然,在您的实际代码中,您的方法可能会接受委托(delegate)作为参数,而不是自行初始化它。

也就是说,使用 moreLinq ,你可以这样做:

var datesBetween = startDate.Generate(date => date.AddDays(1))
                            .TakeWhile(date => date <= endDate);

关于c# - 如何在 C# 中分配委托(delegate)扩展方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15975065/

相关文章:

c# - 无法从 singelton 事件取消订阅 signalR 集线器功能

ios - Objective-C 如何正确实现协议(protocol)或其他解决方案

c# - 'onTimer' 没有重载匹配委托(delegate) 'ElapsedEventHandler'

asp.net-mvc - 未找到 Html 帮助程序扩展

c# - Azure Web 作业 - 在云中实现互斥

c# - 如何更改 TemplateField 的颜色

c# - 这个 Xamarin 自定义渲染器教程中的 CameraOptions 类型是什么?

c# - json 从遗留属性名称反序列化

c# - 您可以在类型上而不是在类型的实例上拥有扩展方法吗?

c# - 静态对象的扩展方法