private static DateTime GetNextTentative(DateTime tentative, Func <DateTime, int> selector, Func <DateTime, DateTime> increment, ScheduleEntry entry) { while (!entry.HasValue(selector(tentative))) { tentative = increment(tentative); } return(tentative); }