Comment convertir DateTime? à DateTime


171

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

Impossible de convertir implicitement le type "System.DateTime?" à «System.DateTime». Une conversion explicite existe (vous manquez un casting?)

J'ai tenté ce qui suit:

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

Réponses:


304

Vous souhaitez utiliser l' opérateur null-coalescing , qui est conçu exactement dans ce but.

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

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

1
voici un extrait que j'ai utilisé dans un présentateur remplissant une vue avec une date / heure Nullable: memDateLogin = m.memDateLogin ?? DateTime.MinValue
Ravi Ram

"DateHeure?" la dose ne contient pas la définition de 'Mise à jourDate'
Vasil Valchev

88

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

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

43

Essaye ça

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

L'essentiel ici est l'opérateur de fusion nul, voir la réponse de chills42 pour plus d'informations.
cspolton

24

Vous pouvez utiliser une distribution simple:

DateTime dtValue = (DateTime) dtNullAbleSource;

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


6
Parfait si vous vérifiez si la var est nulle avant +1
Leandro

22

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

En supposant que UpdatedDatec'est le cas DateTime?, cela devrait fonctionner:

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

Pour rendre le code un peu plus facile à lire, vous pouvez utiliser la propriété HasValue au lieu de la nullvérification:

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

Cela peut alors être rendu encore plus concis:

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

6

Que diriez-vous de ce qui suit:

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

6

Voici un extrait que j'ai utilisé dans un présentateur remplissant une vue avec une date / heure Nullable

memDateLogin = m.memDateLogin ?? DateTime.MinValue


1

Pensez à utiliser ce qui suit qui est bien meilleur que la réponse acceptée

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

Voulez-vous dire pourquoi c'est mieux?
n4rzul

0

Essaye ça:

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

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

4
C'est normalement considéré comme une bonne forme pour expliquer vos suggestions / réponses. Les réponses au code uniquement peuvent être étonnamment peu informatives, même si elles sont techniquement correctes.
Maximilian Ast

1
@MaximilianAst oui vous avez raison essaiera de mettre en œuvre la manière que vous avez suggérée :)
Harsh Vyas
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.