Thêm vào câu trả lời Joel Coehoorn của mà cá nhân tôi nghĩ rằng nên là câu trả lời được chấp nhận như tôi luôn cố gắng tránh khi vòng bất kể có bao an toàn họ có thể xuất hiện. Đối với ... Mỗi là một cách tiếp cận an toàn hơn nhiều mặc dù enumerable không phải là rất đẹp trong dòng. Tuy nhiên, bạn có thể di chuyển nó đến một chức năng để giữ cho mọi thứ dễ đọc hơn, cộng với bạn có thể tái sử dụng khi cần thiết.
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
Tôi cũng đã thêm từ 1 tới phạm vi Enumerable kể từ khi Joel đã có nó, nó sẽ không trở về ngày kết thúc và trong hoàn cảnh của tôi, tôi cần nó để trả lại tất cả số ngày trong phạm vi bao gồm cả đầu và cuối ngày.
Enumerable.Range là một loại vòng lặp tự thêm i ngày vào tiến trình startdate i với mỗi cuộc gọi từ trong trường hợp này 0 đến sự khác biệt giữa ngày bắt đầu và ngày kết thúc + 1. Lần đầu tiên được gọi là bạn nhận được kết quả của Start.AddDays (0), tiếp theo bạn sẽ nhận được Start.AddDays (1) và tiếp tục cho đến khi phạm vi hoàn tất.
Nguồn
2014-12-10 17:05:40
Chỉ cần 2 xu của tôi ở đây, nhưng nếu chức năng của bạn thực sự được gọi là "ProcessData" bạn có thể muốn xem xét một cái gì đó một chút mô tả để bảo trì. Nếu đó chỉ là một tên hàm giả thuyết, vui lòng bỏ qua nhận xét này. – JohnFx