Come convertire DateTime? a DateTime


171

Voglio convertire un DateTime ( DateTime?) nullable in a DateTime, ma sto ricevendo un errore:

Impossibile convertire in modo implicito il tipo "System.DateTime?" a "System.DateTime". Esiste una conversione esplicita (ti manca un cast?)

Ho tentato quanto segue:

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

Risposte:


304

Si desidera utilizzare l' operatore a coalescenza nulla , progettato esattamente per questo scopo.

Usandolo si finisce con questo codice.

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

1
ecco uno snippet che ho usato all'interno di un presentatore riempiendo una vista con una data / ora nullable: memDateLogin = m.memDateLogin ?? DateTime.MinValue
Ravi Ram

'Appuntamento?' la dose non contiene la definizione di "Data aggiornamento"
Vasil Valchev,

88

MS ha già creato un metodo per questo, quindi non è necessario utilizzare l'operatore di coalescenza null. Nessuna differenza in termini di funzionalità, ma è più facile per i non esperti ottenere immediatamente ciò che sta accadendo.

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

43

Prova questo

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

La cosa chiave qui è l'operatore a coalescenza nulla, vedi la risposta di chills42 più informazioni.
cspolton,

24

Puoi usare un cast semplice:

DateTime dtValue = (DateTime) dtNullAbleSource;

Come ha detto Leandro Tupone, devi verificare se il var è nullo prima


6
Perfetto se controlli se il var è nullo prima di +1
Leandro,

22

È necessario chiamare la proprietà Value di DateTime nullable. Ciò restituirà un DateTime.

Supponendo che UpdatedDatesia DateTime?, quindi questo dovrebbe funzionare:

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

Per rendere il codice un po 'più semplice da leggere, è possibile utilizzare la proprietà HasValue anziché il nullcontrollo:

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

Questo può quindi essere reso ancora più conciso:

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

6

Che ne dici di quanto segue:

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

6

Ecco uno snippet che ho usato all'interno di un Presenter riempiendo una vista con una Data / Ora Nullable

memDateLogin = m.memDateLogin ?? DateTime.MinValue


1

Considera di utilizzare quanto segue, che è molto meglio della risposta accettata

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

Vuoi dire perché è meglio?
n4rzul,

0

Prova questo:

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

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

4
È normalmente considerato una buona forma per spiegare i tuoi suggerimenti / risposte. Le risposte solo al codice possono essere sorprendentemente disinformative, anche se tecnicamente corrette.
Maximilian Ast,

1
@MaximilianAst sì, hai ragione, proverai ad attuare il modo che hai suggerito :)
Harsh Vyas
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.