2012-03-30 15 views
1

Gibt es irgendetwas, das die DateTime AddDays()-Methode stoppt, die nicht innerhalb einer While-Schleife ausgeführt wird. Ich habe dieses einfache bisschen Code;AddDays() funktioniert nicht innerhalb einer While-Schleife

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); 
} 

Ich gehe durch das Programm und first_day ändert sich nie, jemand weiß warum ?!

Antwort

9

Der Grund dafür ist, dass DateTime Immutable ist, dies bedeutet, dass Sie es nicht direkt ändern können und stattdessen eine neue Instanz davon erstellen müssen. Strings sind ein anderer Typ, der sich so verhält, wie Sie es vielleicht gewohnt sind.

first_day = first_day.AddDays(1); 
+0

+1 für Link zur Erklärung von "unveränderlich". –

+1

@DanielHilgarth: Danke, aber immer noch eine schnellere Antwort wird fast immer höher bewertet und über eine beschreibende Antwort akzeptiert. – Ian

+1

Deshalb poste ich zuerst eine kurze Antwort und mache sie dann beschreibender ;-) Die höher bewertete Antwort ist ganz oben und die meisten Leute suchen nicht weiter. –

10

DateTime ist unveränderlich. Sie sollten

first_day = first_day.AddDays(1); 

UPDATE tun: Wenn Sie DateTime.AddDays Methodenbeschreibung überprüfen: Returns a new System.DateTime that adds the specified number of days to the value of this instance., die auf alle Vorgänge bezieht (wie Addition, Subtraktion, AddHours usw.) auf Datetime-Struktur - jede Berechnung den Wert der Struktur nicht ändern . Stattdessen gibt die Berechnung eine neue DateTime-Struktur zurück, deren Wert das Ergebnis der Berechnung ist. Das liegt daran, dass DateTime eine unveränderbare Struktur ist. I.e. Instanzwert kann nach der Erstellung nicht geändert werden.

4

DateTime kann nicht geändert werden, sondern stattdessen.

first_day = first_day.AddDays(1); 
+0

Danke für die Bearbeitung des Codes, um wie Code auszusehen, ich tendiere dazu, das richtig zu tun: / –

Verwandte Themen