I want to convert a nullable DateTime (DateTime?
) to a DateTime
, but I am getting an error:
Cannot implicitly convert type 'System.DateTime?' to 'System.DateTime'. An explicit conversion exists (are you missing a cast?)
I have attempted the following:
DateTime UpdatedTime = (DateTime)_objHotelPackageOrder.UpdatedDate == null
? DateTime.Now : _objHotelPackageOrder.UpdatedDate;
You want to use the null-coalescing operator, which is designed for exactly this purpose.
Using it you end up with this code.
DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate ?? DateTime.Now;
How about the following:
DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate.HasValue ? _objHotelPackageOrder.UpdatedDate.value : DateTime.Now;
DateTime UpdatedTime = _objHotelPackageOrder.HasValue ? _objHotelPackageOrder.UpdatedDate.Value : DateTime.Now;
MS already made a method for this, so you dont have to use the null coalescing operator. No difference in functionality, but it is easier for non-experts to get what is happening at a glance.
DateTime updatedTime = _objHotelPackageOrder.UpdatedDate.GetValueOrDefault(DateTime.Now);
You need to call the Value property of the nullable DateTime. This will return a DateTime.
Assuming that UpdatedDate
is DateTime?
, then this should work:
DateTime UpdatedTime = (DateTime)_objHotelPackageOrder.UpdatedDate == null ? DateTime.Now : _objHotelPackageOrder.UpdatedDate.Value;
To make the code a bit easier to read, you could use the HasValue property instead of the null
check:
DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate.HasValue
? _objHotelPackageOrder.UpdatedDate.Value
: DateTime.Now;
This can be then made even more concise:
DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate ?? DateTime.Now;
You can also try Nullable(T) Properties:
DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate.HasValue
? DateTime.Now : _objHotelPackageOrder.UpdatedDate.Value;
You can use a simple cast:
DateTime dtValue = (DateTime) dtNullAbleSource;
As Leandro Tupone said, you have to check if the var is null before
Consider using the following which its far better than the accepted answer
DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate == null
? DateTime.Now : (DateTime)_objHotelPackageOrder.UpdatedDate;
Here is a snippet I used within a Presenter filling a view with a Nullable Date/Time
memDateLogin = m.memDateLogin ?? DateTime.MinValue
Try this
DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate ?? DateTime.Now;
Try this:
DateTime UpdatedTime = (DateTime)_objHotelPackageOrder.UpdatedDate == null ? DateTime.Now : _objHotelPackageOrder.UpdatedDate.Value;
Source: Stackoverflow.com