web-dev-qa-db-fra.com

Comment convertir DateTime? à DateTime

Je veux convertir un DateTime nullable (DateTime?) en un DateTime, mais j'obtiens une erreur:

Impossible de convertir implicitement le type 'System.DateTime?' à 'System.DateTime'. Une conversion explicite existe (manque-t-il un casting?)

J'ai tenté ce qui suit:

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

Vous voulez utiliser le opérateur null-coalescing , qui est conçu pour cela.

En l'utilisant, vous vous retrouvez avec ce code.

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

MS a déjà créé une méthode pour cela, vous n'avez donc pas à utiliser l'opérateur de coalescence nul. Aucune différence de fonctionnalité, mais il est plus facile pour les non-experts d’avoir un aperçu de ce qui se passe.

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

Essaye ça

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

Vous devez appeler la propriété Value de DateTime nullable. Cela renverra un DateTime.

En supposant que UpdatedDate soit DateTime?, alors ceci devrait fonctionner:

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

Pour faciliter la lecture du code, vous pouvez utiliser la propriété HasValue au lieu du contrôle null:

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

Cela peut alors être encore plus concis:

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

Vous pouvez utiliser un casting simple:

DateTime dtValue = (DateTime) dtNullAbleSource;

Comme l'a dit Leandro Tupone, vous devez vérifier si la var est nulle avant

16
César León

Voici un extrait que j'ai utilisé dans un présentateur pour renseigner une vue avec une date/heure nullable

memDateLogin = m.memDateLogin ?? DateTime.MinValue
6
Ravi Ram

Que diriez-vous de ce qui suit:

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

Vous pouvez également essayer Nullable (T) Properties :

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

plutôt utiliser ce qui suit son bien meilleur

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

Essaye ça:

DateTime UpdatedTime = (DateTime)_objHotelPackageOrder.UpdatedDate == null ? DateTime.Now : _objHotelPackageOrder.UpdatedDate.Value;
0
Tim S. Van Haren
DateTime UpdatedTime = _objHotelPackageOrder.HasValue ? _objHotelPackageOrder.UpdatedDate.Value : DateTime.Now;
0
Harsh Vyas