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;
Waheed
quelle

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;
Schüttelfrost42
quelle
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);
Josh
quelle
43

Versuche dies

DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate ?? DateTime.Now;
Valentin Vasilyev
quelle
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

César León
quelle
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;
adrianbanks
quelle
6

Wie wäre es mit folgendem:

DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate.HasValue ? _objHotelPackageOrder.UpdatedDate.value : DateTime.Now;
Simon Wilson
quelle
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
Ravi Ram
quelle
3

Sie können auch Nullable (T) Properties ausprobieren :

DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate.HasValue 
    ? DateTime.Now : _objHotelPackageOrder.UpdatedDate.Value;
Mateusz Rogulski
quelle
1

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

DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate == null 
    ? DateTime.Now : (DateTime)_objHotelPackageOrder.UpdatedDate;
Sadiqabbas Hirani
quelle
Möchtest du sagen, warum es besser ist?
n4rzul
0

Versuche dies:

DateTime UpdatedTime = (DateTime)_objHotelPackageOrder.UpdatedDate == null ? DateTime.Now : _objHotelPackageOrder.UpdatedDate.Value;
Tim S. Van Haren
quelle
0
DateTime UpdatedTime = _objHotelPackageOrder.HasValue ? _objHotelPackageOrder.UpdatedDate.Value : DateTime.Now;
Harte Vyas
quelle
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