ヌル可能なDateTime(DateTime?
)をDateTime
に変換したいのですが、エラーが発生しています:
タイプ「System.DateTime」を暗黙的に変換できませんか? 「System.DateTime」へ。明示的な変換が存在します(キャストを見逃していますか?)
私は次を試みました:
DateTime UpdatedTime = (DateTime)_objHotelPackageOrder.UpdatedDate == null
? DateTime.Now : _objHotelPackageOrder.UpdatedDate;
null-coalescing operator を使用します。これはまさにこの目的のために設計されています。
それを使用すると、このコードになります。
DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate ?? DateTime.Now;
MSはすでにこのためのメソッドを作成しているため、null合体演算子を使用する必要はありません。機能に違いはありませんが、専門家ではない人でも簡単に一目で把握できます。
DateTime updatedTime = _objHotelPackageOrder.UpdatedDate.GetValueOrDefault(DateTime.Now);
これを試して
DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate ?? DateTime.Now;
NULL可能DateTimeの Value プロパティを呼び出す必要があります。これはDateTimeを返します。
UpdatedDate
がDateTime?
であると仮定すると、これは動作するはずです:
DateTime UpdatedTime = (DateTime)_objHotelPackageOrder.UpdatedDate == null ? DateTime.Now : _objHotelPackageOrder.UpdatedDate.Value;
コードを少し読みやすくするために、null
チェックの代わりに HasValue プロパティを使用できます。
DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate.HasValue
? _objHotelPackageOrder.UpdatedDate.Value
: DateTime.Now;
これにより、さらに簡潔にすることができます。
DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate ?? DateTime.Now;
単純なキャストを使用できます。
DateTime dtValue = (DateTime) dtNullAbleSource;
Leandro Tuponeが言ったように、varがnullであるかどうかを確認する
これは、Nullable Date/Timeでビューを埋めるプレゼンター内で使用したスニペットです
memDateLogin = m.memDateLogin ?? DateTime.MinValue
以下はどうですか:
DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate.HasValue ? _objHotelPackageOrder.UpdatedDate.value : DateTime.Now;
Nullable(T)Properties を試すこともできます:
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;