Ну, в случае локальной переменной ясно, что означает «раньше», поскольку поток программы между объявлением (в методе) и ссылкой последователен. В случае полей, объявленных вне метода, компилятор никогда не знает, какой код будет использоваться, когда он не сможет сгенерировать ошибку, поскольку, возможно, какой-либо другой метод будет инициализировать поле до его использования.
Вы хотите использовать оператор объединения с нулем , который разработан именно для этой цели.
Используя его, вы получите следующий код.
DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate ?? DateTime.Now;
MS уже разработала для этого метод, поэтому вам не нужно использовать нулевой оператор объединения. Никакой разницы в функциональности нет, но неспециалистам легче понять, что происходит с первого взгляда.
DateTime updatedTime = _objHotelPackageOrder.UpdatedDate.GetValueOrDefault(DateTime.Now);
Попробуйте это
DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate ?? DateTime.Now;
Вам нужно вызвать свойство Value объекта DateTime, допускающего значение NULL. Это вернет 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;
Попробуйте следующее:
DateTime UpdatedTime = (DateTime)_objHotelPackageOrder.UpdatedDate == null ? DateTime.Now : _objHotelPackageOrder.UpdatedDate.Value;