Ist es möglich eine Schleife über einen Zeitbereich laufen zu lassen? Also z.B. vom 20.05.2005 bis 03.05.2005? Irgendwie habe ich keinen Ansatz. Einen TimeSpan für die Tage nützt mir nicht viel da ich die jeweiligen Daten brauche und dann aufwendig die Monatsübergänge ausprogrammieren müsste.
Gibt es eine bessere Möglichkeit? Bräuchte etwas Starthilfe 🙂 Danke!
z.b. so:
DateTime dat1 = new DateTime(2005, 10, 1);
DateTime dat2 = new DateTime(2005, 10, 10);
while(dat1 < dat2)
{
Console.WriteLine(dat1.ToString());
dat1 = dat1.AddDays(1);
}
Hmm.... Kopf kratz einfacher gehts kaum noch.... Ich geh mal nen doppelten Espresso trinken. Danke jedenfalls.
Hallo zusammen,
doch, es geht noch einfacher 🙂
DateTime dat2 = new DateTime(2005, 10, 10);
for (DateTime dat1 = new DateTime(2005, 10, 1); dat1 < dat2; dat1 = dat1.AddDays(1))
{
Console.WriteLine(dat1);
}
Jedenfalls finde ich eine for-Schleife hier viel passender.
herbivore
Original von herbivore
doch, es geht noch einfacher 🙂
wenn du unübersichtlicher gemeint hast, dann kann man es noch steigern 😉
for (DateTime dat1 = new DateTime(2005, 10, 1),dat2 = new DateTime(2005, 10, 10); dat1 < dat2; Console.WriteLine(dat1),dat1 = dat1.AddDays(1));
Hallo Xqgene,
ich finde es mit for (meine Variante) übersichtlicher, klarer und praktischer als mit while.
übersichtlicher - ok, kann man drüber streiten
klarer - die Schleife, um die es hier geht, ist eine klassische Zählschleife, mit Initialisierung, Bedingung und Reinitialsierung. Dafür gibt es in der for-Schleife feste Orte und durch diese Orte ist klar, welcher Codeteil welche Bedeutung hat. Deshalb finde ich es auch übersichtlicher.
praktischer - die Reinitialsierung wird weniger leicht vergessen, sicher bei jedem Schleifendurchlauf ausgeführt und kann - noch wichtiger - durch ein continue nicht (versehentlich) übergangen werden.
Dein Beispiel "zerstört" die Struktur der for-Schleife in dem du mehr oder weniger willkürlich Anweisungen in die einzelnen Teile des Schleifenkopfes schreibst.
herbivore
PS: Wenn einem die Performace egal ist (oder wenn der Complier new DateTime(2005, 10, 10) als quasi Datumsliteral erkennen würde) könnte man schreiben
for (DateTime dat = new DateTime(2005, 10, 1); dat < new DateTime(2005, 10, 10); dat = dat.AddDays(1))
{
Console.WriteLine(dat);
}
wodurch es in meinen Augen noch klarer wird.
Original von herbivore
Dein Beispiel "zerstört" die Struktur der for-Schleife in dem du mehr oder weniger willkürlich Anweisungen in die einzelnen Teile des Schleifenkopfes schreibst.
thja... man soll die Möglichkeiten einer Sprache voll ausnutzen g.
.NET Golf lässt grüßen!
Über die Übersichtlichkeit kann man sich streiten. Ist eh Ansichtssache.