#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 вместе.