Ajout à la réponse de Joel Coehoorn que je pense personnellement devrait être la réponse acceptée comme je l'essaie toujours d'éviter les boucles While, peu importe le degré de sécurité qu'ils peut apparaître. Pour ... Chacun est une approche beaucoup plus sûre bien que l'énumérable n'est pas très joli en ligne. Vous pouvez cependant le déplacer vers une fonction pour garder les choses plus lisibles, et vous pouvez réutiliser au besoin.
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
J'ai également ajouté 1 à la gamme Enumerable depuis que Joel avait, il ne retournerait pas la date de fin et dans ma situation je en avais besoin de retourner toutes les dates de la gamme, y compris les jours de début et de fin. Enumerable.Range est une sorte de boucle en elle-même qui ajoute i jours au startdate en avançant i avec chaque appel de 0 dans ce cas à la différence entre les jours de début et de fin + 1. Ainsi, la première fois que vous l'appelez le résultat de Start.AddDays (0), vous obtiendrez Start.AddDays (1) et ainsi de suite jusqu'à ce que la plage soit complète.
Juste mes 2 cents ici, mais si votre fonction est vraiment appelée "ProcessData" vous voudrez peut-être envisager quelque chose d'un peu plus descriptif pour la maintenabilité. Si ce n'était qu'un nom de fonction hypothétique, veuillez ignorer ce commentaire. – JohnFx