Wie man Daten zwischen zwei Datumsangaben in C#
Ich möchte, um Termine zwischen zwei Terminen. Statt der erwarteten 9 verschiedene Termine, ich bekomme 875287 und run out of memory. Was wäre das problem mit dem code unten?
StartDate
Wert ist 01/04/2016 00:00:00
EndDate
Wert ist 10/04/2016 00:00:00
var selectedDates = new List<DateTime?>();
for (var date = StartDate; date <= EndDate; date.Value.AddDays(1))
{
selectedDates.Add(date);
}
- Entschuldigung, müde Gehirn, nicht sehen, wie Sie immer waren, die Endlosschleife
- Möglich, Duplikat der Immer alle DateTimes zwischen zwei 'DateTime in C#
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du nicht die Zuweisung der Wert
date.Value.AddDays(1)
nichts, also es endet in einer Endlosschleife. Sie müssten den code ändern, so dassdate
ist auf das Ergebnis derAddDays
.String
, Manipulationen aufDateTime
Objekte geben einen new object statt, eine änderung der bestehenden.date
sieht aus wieDateTime?
, nichtDateTime
weilDateTime
nicht über eine Eigenschaft namensValue
.Nullable<DateTime>
keine Methode namensAddDays
.LINQ Lösung (let ' s generieren
selectedDates
):AddDays(1)
Idee ist sogar richtig.DateTime?
? Was wäre das Problem mit der Auswahl der Rückgabewert vonStartDate.AddDays(index)
?DateTime
, aber der Fragesteller hatte verwendet eineList<DateTime?>
in seiner Frage.new DateTime?
ist einfach eine Möglichkeit der Erzwingung der Rückgabe-Wert in den Zieltyp.var selectedDates = new List<DateTime?>(); for ... Add ...
ich nur create: nach ausführen von Linq AbfrageselectedDates
erscheint einList<DateTime?>
enthält die gewünschten DatenSoweit ich das sehen kann, da
AddDays
Methode liefert eine neue Instanz einesDateTime
es tut nicht ändern Sie die aktuelle Instanz seitDateTime
ist unveränderlich.Sieht aus wie Ihre
date
istDateTime?
können Sie ändern;Als usr spitz, das könnte beeinflusst werden, auf die Sommerzeit. Sie möglicherweise wollen überprüfen Dmitry Antwort als gut.
DateTime
Struktur ist nicht betrachten Sommerzeit in arithmetischen Operationen. Aber basierend auf der OP das start-und Enddatum, das sollte nicht sein Fall. Aktualisiert meine Antwort zu Punkt Dmitry Antwort als gut. Danke.Eine kürzere Schreibweise ist die Verwendung von Linq ist die Range-Methode verwendet die Möglichkeit, bereits herauszufinden, die Anzahl von Tagen mit
TimeSpan.Days
Immobilie nach Abzug Anfang vom Ende.Vorausgesetzt, der start ist vor dem Ende würden Sie am Ende mit:
Wenn Sie es brauchen, werden null-Werte zulässt, fügen Sie hinzu:
Wenn Sie diese zu einer Liste hinzufügen:
Ist es wahrscheinlich schon ein bisschen mehr effizient als andere LINQ-basierte Lösung.
Beschlossen, ändern Sie es mit einer do/while