Как конвертировать DateTime? в DateTime

Ну, в случае локальной переменной ясно, что означает «раньше», поскольку поток программы между объявлением (в методе) и ссылкой последователен. В случае полей, объявленных вне метода, компилятор никогда не знает, какой код будет использоваться, когда он не сможет сгенерировать ошибку, поскольку, возможно, какой-либо другой метод будет инициализировать поле до его использования.

151
задан Irvin Dominin 14 June 2018 в 06:39
поделиться

6 ответов

Вы хотите использовать оператор объединения с нулем , который разработан именно для этой цели.

Используя его, вы получите следующий код.

DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate ?? DateTime.Now;
289
ответ дан 23 November 2019 в 21:52
поделиться

MS уже разработала для этого метод, поэтому вам не нужно использовать нулевой оператор объединения. Никакой разницы в функциональности нет, но неспециалистам легче понять, что происходит с первого взгляда.

DateTime updatedTime = _objHotelPackageOrder.UpdatedDate.GetValueOrDefault(DateTime.Now);
82
ответ дан 23 November 2019 в 21:52
поделиться

Попробуйте это

DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate ?? DateTime.Now;
41
ответ дан 23 November 2019 в 21:52
поделиться

Вам нужно вызвать свойство 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;
21
ответ дан 23 November 2019 в 21:52
поделиться

Как насчет следующего:

DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate.HasValue ? _objHotelPackageOrder.UpdatedDate.value : DateTime.Now;
6
ответ дан 23 November 2019 в 21:52
поделиться

Попробуйте следующее:

DateTime UpdatedTime = (DateTime)_objHotelPackageOrder.UpdatedDate == null ? DateTime.Now : _objHotelPackageOrder.UpdatedDate.Value;
0
ответ дан 23 November 2019 в 21:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: