Ich habe viel gesucht, aber keine Lösung gefunden. Wie gehen Sie mit einer DateTime um, die einen nicht initialisierten Wert enthalten sollte (entspricht null)? Ich habe eine Klasse, für die möglicherweise ein DateTime-Eigenschaftswert festgelegt ist oder nicht. Ich dachte daran, den Eigentümer auf DateTime.MinValue zu initialisieren, was dann leicht überprüft werden konnte. Ich denke, das ist eine ziemlich häufige Frage. Wie machst du das?
273
DateTime.MinValue
werdenMyNullableDate=date;
es einstellen, darausMyDate = MyNullableDate.Value;
lesen undif(MyNullableDate.HasValue)
prüfen, ob es null istWenn Sie .NET 2.0 (oder höher) verwenden, können Sie den nullbaren Typ verwenden:
oder
dann später:
Und Sie können den Wert überprüfen mit:
Oder Sie können es verwenden wie:
Weitere Informationen finden Sie hier:
http://msdn.microsoft.com/en-us/library/b3h38hb0.aspx
quelle
dt.GetValueOrDefault()
- es ist die effizienteste Option.Terminzeit? MyDateTime {get; set;}
quelle
null
nicht funktioniert. Es muss sein(DateTime?)null
.Der folgende Weg funktioniert auch
Bitte beachten Sie, dass die Eigenschaft PublishDate DateTime sein sollte.
quelle
Ich würde in Betracht ziehen, nullbare Typen zu verwenden .
DateTime? myDate
stattDateTime myDate
.quelle
Es sei darauf hingewiesen, dass eine
DateTime
Variable zwar nicht sein kannnull
, aber dennochnull
ohne Compilerfehler verglichen werden kann:quelle
Sie können eine nullfähige Klasse verwenden.
quelle
DateTime
. Wie bereits erwähnt, erhalten Sienew DateTime()
effektiv,DateTime.Min
währendnew DateTime?()
zu null führen.Sie können hierfür eine nullfähige DateTime verwenden.
oder dasselbe wie folgt geschrieben:
quelle
Sie können DateTime auf Nullable setzen. Standardmäßig ist DateTime nicht nullwertfähig. Sie können es auf verschiedene Arten auf Null setzen. Verwenden Sie ein Fragezeichen nach dem Typ DateTime? myTime oder mit dem generischen Stil Nullable.
oder
quelle
Ich stelle immer die Zeit ein
DateTime.MinValue
. Auf diese Weise erhalte ich keine NullErrorException und kann sie mit einem Datum vergleichen, von dem ich weiß, dass es nicht festgelegt ist.quelle
Seien Sie gewarnt - Wenn Sie eine Nullable verwenden, handelt es sich offensichtlich nicht mehr um ein "reines" Datum / Uhrzeit-Objekt. Daher können Sie nicht direkt auf die DateTime-Mitglieder zugreifen. Ich werde versuchen zu erklären.
Wenn Sie Nullable <> verwenden, verpacken Sie DateTime im Grunde genommen in einen Container (danke Generika), der nullbar ist - offensichtlich der Zweck. Dieser Container verfügt über eigene Eigenschaften, die Sie aufrufen können und die den Zugriff auf das oben genannte DateTime-Objekt ermöglichen. Nachdem Sie die richtige Eigenschaft verwendet haben - in diesem Fall Nullable.Value - haben Sie Zugriff auf die Standard-DateTime-Mitglieder, -Eigenschaften usw.
Nun kommt das Problem in den Sinn, wie am besten auf das DateTime-Objekt zugegriffen werden kann. Es gibt ein paar Möglichkeiten, Nummer 1 ist bei weitem die beste und 2 ist "Dude Why".
Verwenden der Eigenschaft Nullable.Value
DateTime date = myNullableObject.Value.ToUniversalTime(); //Works
DateTime date = myNullableObject.ToUniversalTime(); //Not a datetime object, fails
Konvertieren des nullbaren Objekts in datetime mit Convert.ToDateTime (),
DateTime date = Convert.ToDateTime(myNullableObject).ToUniversalTime(); //works but why...
Obwohl die Antwort an dieser Stelle gut dokumentiert ist, glaube ich, dass die Verwendung von Nullable wahrscheinlich einen Beitrag wert war. Entschuldigung, wenn Sie nicht einverstanden sind.
Bearbeiten: Eine dritte Option wurde entfernt, da sie etwas zu spezifisch und fallabhängig war.
quelle
Obwohl Ihnen bereits jeder die Antwort gegeben hat, werde ich einen Weg erwähnen, der es einfach macht, eine Datums- / Uhrzeitangabe an eine Funktion zu übergeben
[FEHLER: System.datetime kann nicht konvertiert werden? zu system.datetime]
Jetzt können Sie dte ohne Probleme innerhalb der Funktion übergeben.
quelle
Wenn Sie manchmal Null erwarten, können Sie Folgendes verwenden:
Verwenden Sie in Ihrem Repository die nullfähige Datumszeit.
quelle
Ich hatte das gleiche Problem, als ich beim Durchführen eines Unit-Tests für Throws ArgumentNullException Null als Parameter für DateTime angeben musste. In meinem Fall funktionierte dies mit der folgenden Option:
quelle
Aufgrund der Art eines Datums- / Uhrzeitdatentyps kann er keinen
null
Wert enthalten , dh er muss einen Wert enthalten, er darf nicht leer sein oder nichts enthalten. Wenn Sie eine Datums- / Zeitvariable als markieren,nullable
können Sie ihr nur einen Nullwert zuweisen. Was Sie also tun möchten, ist eines von zwei Dingen (es könnte mehr geben, aber ich kann nur an zwei denken):Weisen Sie Ihrer Variablen einen Mindestwert für Datum und Uhrzeit zu, wenn Sie keinen Wert dafür haben. Sie können auch einen maximalen Datums- / Zeitwert zuweisen - je nachdem, wie es Ihnen passt. Stellen Sie einfach sicher, dass Sie auf der gesamten Website konsistent sind, wenn Sie Ihre Datums- / Zeitwerte überprüfen. Entscheide dich für
min
odermax
und bleibe dabei.Markieren Sie Ihre Datums- / Zeitvariable als
nullable
. Auf diese Weise können Sie Ihre Datums- / Zeitvariable auf einstellen,null
wenn Sie keine Variable haben.Lassen Sie mich meinen ersten Punkt anhand eines Beispiels demonstrieren. Der
DateTime
Variablentyp kann nicht auf null gesetzt werden, er benötigt einen Wert. In diesem Fall setze ich ihn auf denDateTime
Mindestwert setzen, wenn kein Wert vorhanden ist.Mein Szenario ist, dass ich eine
BlogPost
Klasse habe. Es hat viele verschiedene Felder / Eigenschaften, aber ich habe nur zwei für dieses Beispiel verwendet.DatePublished
Dies ist der Zeitpunkt, an dem der Beitrag auf der Website veröffentlicht wurde und einen Datums- / Zeitwert enthalten muss.DateModified
Wenn ein Beitrag geändert wird, muss er keinen Wert enthalten, kann aber einen Wert enthalten.Verwenden
ADO.NET
, um die Daten aus der Datenbank abzurufen (zuweisen,DateTime.MinValue
dass kein Wert vorhanden ist):Sie können meinen zweiten Punkt erreichen, indem Sie das
DateModified
Feld als markierennullable
. Jetzt können Sie festlegen,null
ob kein Wert dafür vorhanden ist:Wenn
ADO.NET
Sie die Daten aus der Datenbank abrufen, sieht sie etwas anders aus als oben (Zuweisennull
stattDateTime.MinValue
):Ich hoffe, dies hilft, Verwirrung zu beseitigen. Da meine Antwort ungefähr 8 Jahre später ist, sind Sie wahrscheinlich inzwischen ein erfahrener C # -Programmierer :)
quelle