Agregando a la respuesta de Joel Coehoorn que personalmente creo que debería ser la respuesta aceptada como siempre trato de evitar mientras bucles no importa cuán seguros puede aparecer. Para ... Cada uno es un enfoque mucho más seguro, aunque el enumerable no es muy bonito en línea. Sin embargo, puede moverlo a una función para mantener las cosas más legibles, además de que puede reutilizar según sea necesario.
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
También añade 1 al rango Enumerable ya que como Joel lo tenía, no volvería la fecha de finalización y en mi situación lo necesitaba para devolver todas las fechas del rango, incluyendo los días de inicio y fin.
Enumerable.Range es una especie de bucle en sí mismo que agrega i días a la fecha de inicio que avanza i con cada llamada de en este caso 0 a la diferencia entre días de inicio y final + 1. Así que la primera vez que se llama se obtiene el resultado de Start.AddDays (0), a continuación obtendrá Start.AddDays (1) y así sucesivamente hasta que se complete el rango.
Simplemente mis 2 centavos aquí, pero si su función realmente se llama "ProcessData", es posible que desee considerar algo un poco más descriptivo para el mantenimiento. Si ese fue solo el nombre de una función hipotética, ignore este comentario. – JohnFx