Ответ 1
Вы хотите использовать оператор с нулевой связностью, который предназначен именно для этой цели.
Используя его, вы получите этот код.
DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate ?? DateTime.Now;
Я хочу преобразовать nullable DateTime (DateTime?
) в DateTime
, но я получаю сообщение об ошибке:
"Cannot implicitly convert type 'System.DateTime?' to 'System.DateTime'. An explicit conversion exists (are you missing a cast?)"
Я попытался сделать следующее:
DateTime UpdatedTime = (DateTime)_objHotelPackageOrder.UpdatedDate == null
? DateTime.Now : _objHotelPackageOrder.UpdatedDate;
Вы хотите использовать оператор с нулевой связностью, который предназначен именно для этой цели.
Используя его, вы получите этот код.
DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate ?? DateTime.Now;
MS уже сделала для этого метод, поэтому вам не нужно использовать оператор нулевой коалесценции. Нет никакой разницы в функциональности, но для неспециалистов легче получить то, что происходит с первого взгляда.
DateTime updatedTime = _objHotelPackageOrder.UpdatedDate.GetValueOrDefault(DateTime.Now);
Попробуйте это
DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate ?? DateTime.Now;
Вам нужно вызвать свойство Value нулевого значения DateTime. Это вернет DateTime.
Предполагая, что UpdatedDate
DateTime?
, тогда это должно работать:
DateTime UpdatedTime = (DateTime)_objHotelPackageOrder.UpdatedDate == null ? DateTime.Now : _objHotelPackageOrder.UpdatedDate.Value;
Чтобы сделать код немного легче читать, вы можете использовать свойство HasValue вместо проверки null
:
DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate.HasValue
? _objHotelPackageOrder.UpdatedDate.Value
: DateTime.Now;
Это можно сделать еще более кратким:
DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate ?? DateTime.Now;
Как насчет следующего:
DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate.HasValue ? _objHotelPackageOrder.UpdatedDate.value : DateTime.Now;
Вот фрагмент, который я использовал в Presenter, заполняющем представление с помощью Nullable Date/Time
memDateLogin = m.memDateLogin ?? DateTime.MinValue
Вы можете использовать простой состав:
DateTime dtValue = (DateTime) dtNullAbleSource;
Вы также можете попробовать Свойства Nullable (T):
DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate.HasValue
? DateTime.Now : _objHotelPackageOrder.UpdatedDate.Value;
скорее, пользователь, следующий за ним гораздо лучше
DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate == null
? DateTime.Now : (DateTime)_objHotelPackageOrder.UpdatedDate;
Попробуйте следующее:
DateTime UpdatedTime = (DateTime)_objHotelPackageOrder.UpdatedDate == null ? DateTime.Now : _objHotelPackageOrder.UpdatedDate.Value;
DateTime UpdatedTime = _objHotelPackageOrder.HasValue ? _objHotelPackageOrder.UpdatedDate.Value : DateTime.Now;