我已经解决了这个问题,但使用了相当复杂的代码,我希望对其进行优化和重构。问题是我有一个事件列表Events,每个Event都与重复模式RecurrencePattern相关。
Event对象如下所示:Id, StartDate, EndDate?, RecurrencePattern
我有一个名为GenerateOccurrences()的函数,它将基于该事件的RecurrencePattern返回List<Event>。假设事件每周重复一次,GenerateOccurrences()将返回当前月份的四个项目。
RecurrencePattern属性本身与List<ExceptionRule>相关,该属性用于从GenerateOcccurrences()的输出中省略某些出现。这可以通过使用另一种方法来实现,我们称之为AddExceptionRule(DateTime date)。
我正在寻找在添加ExceptionRule之后执行清理的最佳算法。特别需要清理以删除存储在该列表中的任何冗余日期。冗余项的示例是出现在Event开始日期之前或EndDate之后的日期(如果适用,因为它是可选的)。
我创建了一个FindClosestSibling()方法,它可以找到最近的可用开始日期,用于更新Event对象和最近的EndDate。但我觉得这对于可以用不同方式完成的事情来说非常复杂。
总之,假设我们生成了:o1、o2、o3、o4、o5……o10,然后我们希望删除o3=>;只会添加例外规则。但是,将例外规则添加到o1会将事件日期更新为o2的日期,因为它是最接近的可用同级,但是,如果o2已经是例外,则情况不会如此,因为现在o3将是下一个可用的。等
如果描述不清楚,我很乐意分享更多细节。