Проблемы с датой, временем и бесконечными циклами

#c#

#c#

Вопрос:

Я знаю, что, вероятно, есть действительно очевидный ответ на этот вопрос, но почему я получаю бесконечный цикл с этим кодом? (laterDate1 — это более поздняя дата, чем dateTime1, а laterDate2 — более поздняя дата, чем dateTime2)

 while (dateTime1.CompareTo(laterDate1) <= 0)
        {
            DateTime dateTime2 = otherDateTime;
            while (dateTime2.CompareTo(laterDate2) <= 0)
            {
                dateTime2.AddDays(1);
            }
            dateTime1.AddDays(1);
        }
  

Заранее спасибо за вашу помощь. (Мой мозг сегодня не работает)

Комментарии:

1. Еще одна вещь, о которой следует помнить, — это то, что DateTime перегружает операторы сравнения, такие как operator <= , чтобы вы могли прямо сказать while (dateTime1 <= laterDate1) , что легче читать.

2. Из любопытства, что вы на самом деле пытаетесь сделать? В частности, какова цель вложенных циклов? Похоже, что внутренний цикл не имеет никакой ссылки на внешний.

3. Исходный код был немного сложнее, я удалил часть из него. Код использовался для проверки, достаточно ли места в отеле на какой-либо конкретный день, на который новый клиент хочет там остаться.

Ответ №1:

dateTime1.AddDays(1); не изменяется dateTime1 . Он возвращает новый DateTime экземпляр. Вы должны присвоить его обратно вашей переменной:

 dateTime1 = dateTime1.AddDays(1);
  

То же самое относится к dateTime2.AddDays(2) :

 dateTime2 = dateTime2.AddDays(1);
  

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

Комментарии:

1. Большое спасибо! Я знал, что это неизменяемо, но я просто не сложил 2 и 2 вместе.