2012-03-30 4 views
1

Есть ли что-либо, что останавливает метод DateTime AddDays(), который не работает в цикле while. У меня есть этот простой код;AddDays() не работает в цикле while

DateTime last_day = monthCalendar2.SelectionRange.End; 
DateTime first_day = new DateTime(year, month, day); 

//Insert dates into vector 
while (first_day != last_day) 
{ 
    dates.Add(first_day); 
    first_day.AddDays(1); 
} 

Я прохожу через программу, а first_day никогда не меняется, кто-нибудь знает почему ?!

ответ

9

Причина в том, что DateTime Immutable, это означает, что вы не можете напрямую изменить его и вместо этого нужно создать новый экземпляр. Строки - это другой тип, который ведет себя таким образом, к которому вы, возможно, больше привыкли.

first_day = first_day.AddDays(1); 
+0

+1 для ссылки на пояснения "неизменяемый". –

+1

@ DanielHilgarth: Спасибо, но все же более быстрый ответ почти всегда оценивается выше и принят более наглядным ответом. – Ian

+1

Вот почему я сначала отправляю короткий ответ, а затем делаю его более описательным ;-). Вышеуказанный ответ наверху, и большинство людей больше не смотрят. –

10

DateTime неизменен. Вы должны сделать

first_day = first_day.AddDays(1); 

UPDATE: Если вы проверяете DateTime.AddDays описания метода: Returns a new System.DateTime that adds the specified number of days to the value of this instance. Это относится ко всем операциям (например, сложение, вычитание, AddHours и т.д.) по структуре DateTime - любой расчет не изменяет значение структуры , Вместо этого вычисление возвращает новую структуру DateTime, значение которой является результатом вычисления. Это потому, что DateTime - неизменяемая структура. То есть значение экземпляра не может быть изменено после его создания.

4

DateTime не может быть изменено, поэтому вместо этого.

first_day = first_day.AddDays(1); 
+0

Спасибо за редактирование кода, чтобы он выглядел как код, я, как правило, забыл сделать это правильно: / –

Смежные вопросы