Wie konvertiere ich DateTime? zu DateTime


171

Ich möchte eine nullfähige DateTime ( DateTime?) in eine konvertieren, erhalte DateTimejedoch eine Fehlermeldung:

Typ 'System.DateTime?' Kann nicht implizit konvertiert werden. zu 'System.DateTime'. Es gibt eine explizite Konvertierung (fehlt Ihnen eine Besetzung?)

Ich habe Folgendes versucht:

DateTime UpdatedTime = (DateTime)_objHotelPackageOrder.UpdatedDate == null 
    ? DateTime.Now : _objHotelPackageOrder.UpdatedDate;

Antworten:


304

Sie möchten den Null-Koaleszenz-Operator verwenden , der genau für diesen Zweck entwickelt wurde.

Wenn Sie es verwenden, erhalten Sie diesen Code.

DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate ?? DateTime.Now;

1
Hier ist ein Ausschnitt, den ich in einem Presenter verwendet habe, um eine Ansicht mit einem Datum / einer Uhrzeit von Null zu füllen:memDateLogin = m.memDateLogin ?? DateTime.MinValue
Ravi Ram

'Terminzeit?' Dosis enthält keine Definition für 'UpdatedDate'
Vasil Valchev

88

MS hat hierfür bereits eine Methode erstellt, sodass Sie den Null-Koaleszenz-Operator nicht verwenden müssen. Kein Unterschied in der Funktionalität, aber für Nicht-Experten ist es einfacher, auf einen Blick zu erkennen, was gerade passiert.

DateTime updatedTime = _objHotelPackageOrder.UpdatedDate.GetValueOrDefault(DateTime.Now);

43

Versuche dies

DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate ?? DateTime.Now;

Der Schlüssel hier ist der Null-Koaleszenz-Operator. Weitere Informationen finden Sie in der Antwort von chills42.
Cspolton

24

Sie können eine einfache Besetzung verwenden:

DateTime dtValue = (DateTime) dtNullAbleSource;

Wie Leandro Tupone sagte, müssen Sie vorher prüfen, ob die Variable null ist


6
Perfekt, wenn Sie überprüfen, ob die Variable vor +1
Leandro

22

Sie müssen die Value- Eigenschaft der nullbaren DateTime aufrufen. Dies gibt eine DateTime zurück.

Unter der Annahme , dass UpdatedDateist DateTime?, dann sollte diese Arbeit:

DateTime UpdatedTime = (DateTime)_objHotelPackageOrder.UpdatedDate == null ? DateTime.Now : _objHotelPackageOrder.UpdatedDate.Value;

Um das Lesen des Codes zu vereinfachen, können Sie anstelle der Prüfung die HasValue- Eigenschaft verwenden null:

DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate.HasValue
                          ? _objHotelPackageOrder.UpdatedDate.Value
                          : DateTime.Now;

Dies kann dann noch präziser gestaltet werden:

DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate ?? DateTime.Now;

6

Wie wäre es mit folgendem:

DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate.HasValue ? _objHotelPackageOrder.UpdatedDate.value : DateTime.Now;

6

Hier ist ein Ausschnitt, den ich in einem Presenter verwendet habe, um eine Ansicht mit einem Datum / einer Uhrzeit von Null zu füllen

memDateLogin = m.memDateLogin ?? DateTime.MinValue


1

Verwenden Sie Folgendes, was weitaus besser ist als die akzeptierte Antwort

DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate == null 
    ? DateTime.Now : (DateTime)_objHotelPackageOrder.UpdatedDate;

Möchtest du sagen, warum es besser ist?
n4rzul

0

Versuche dies:

DateTime UpdatedTime = (DateTime)_objHotelPackageOrder.UpdatedDate == null ? DateTime.Now : _objHotelPackageOrder.UpdatedDate.Value;

0
DateTime UpdatedTime = _objHotelPackageOrder.HasValue ? _objHotelPackageOrder.UpdatedDate.Value : DateTime.Now;

4
Es wird normalerweise als gute Form angesehen, Ihre Vorschläge / Antworten zu erklären. Nur-Code-Antworten können überraschend wenig aussagekräftig sein, selbst wenn sie technisch korrekt sind.
Maximilian Ast

1
@ MaximilianAst ja, Sie haben Recht, werden versuchen, die von Ihnen vorgeschlagene Weise umzusetzen :)
Harsh Vyas
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.