Добавление к ответу Джоэла Кохорна, который я лично считаю, должно быть приемлемым ответом, поскольку я всегда стараюсь избегать циклов «В то время как независимо от того, насколько безопасными они могут быть». Для ... Каждый из них является гораздо более безопасным подходом, хотя перечисляемый не очень симпатичен. Однако вы можете переместить его в функцию, чтобы сделать вещи более читабельными, плюс вы можете использовать их по мере необходимости.
For Each Day As DateTime In DateRange(StartDate, EndDate)
ProcessData(Day)
Console.WriteLine(Day.ToShortDateString)
Next
Public Shared Function DateRange(Start As DateTime, Thru As DateTime) As IEnumerable(Of Date)
Return Enumerable.Range(0, (Thru.Date - Start.Date).Days + 1).Select(Function(i) Start.AddDays(i))
End Function
Я также добавил 1 к диапазону Enumerable, поскольку, как и у Джоэла, он не возвращал дату окончания, и в моей ситуации мне требовалось, чтобы он возвращал все даты в диапазоне, включая дни начала и окончания.
Enumerable.Range сам по себе является своего рода циклом, который добавляет i дней к начальной дате, увеличивая i с каждым вызовом, в данном случае от 0 до разницы между началом и концом дней + 1. Таким образом, при первом вызове вы получаете результат Start.AddDays (0), затем вы получите Start.AddDays (1) и т. д., пока диапазон не будет заполнен.