Использование DateTime в цикле For, приращение даты не работает - PullRequest
21 голосов
/ 11 августа 2010

У меня есть этот цикл, его цель - циклически проходить по диапазону дат и выполнять некоторую логику для автоматизации добавления записей в базу данных.Проблема в том, что увеличивающаяся часть date.AddDays (1.0) не работает и всегда имеет одинаковый результат, вызывая бесконечный цикл.Любое понимание?

for (DateTime date = DateTime.Now; futureDate.CompareTo(date) > 0; date.AddDays(1.0))
{
    // logic here
}

Ответы [ 2 ]

62 голосов
/ 11 августа 2010

DateTime.AddDays возвращает новый экземпляр без изменения date. На данный момент вы выбрасываете этот новый экземпляр. Вместо этого вам нужно сделать:

for (DateTime date = DateTime.Now; futureDate.CompareTo(date) > 0; date = date.AddDays(1.0))
{
    // logic here
}

Кроме того, я не уверен, почему вы звоните CompareTo, когда вы можете использовать оператор <. Я не могу сказать, правильна ли CompareTo(date) > 0, не задумываясь об этом, в то время как намерение оператора < очевидно:

for (DateTime date = DateTime.Now; date < futureDate; date = date.AddDays(1.0))
{
    // logic here
}
8 голосов
/ 11 августа 2010

DateTime является неизменным. Изменить на: date = date.AddDays (1.0)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...