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;
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;
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);
Essaye ça
DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate ?? DateTime.Now;
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;
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
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
Que diriez-vous de ce qui suit:
DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate.HasValue ? _objHotelPackageOrder.UpdatedDate.value : DateTime.Now;
Vous pouvez également essayer Nullable (T) Properties :
DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate.HasValue
? DateTime.Now : _objHotelPackageOrder.UpdatedDate.Value;
plutôt utiliser ce qui suit son bien meilleur
DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate == null
? DateTime.Now : (DateTime)_objHotelPackageOrder.UpdatedDate;
Essaye ça:
DateTime UpdatedTime = (DateTime)_objHotelPackageOrder.UpdatedDate == null ? DateTime.Now : _objHotelPackageOrder.UpdatedDate.Value;
DateTime UpdatedTime = _objHotelPackageOrder.HasValue ? _objHotelPackageOrder.UpdatedDate.Value : DateTime.Now;