簡體   English   中英

如何轉換日期時間? 到日期時間

[英]How to convert DateTime? to DateTime

我想將可為空的 DateTime ( DateTime? ) 轉換為DateTime ,但出現錯誤:

無法隱式轉換類型“System.DateTime?” 到“系統。日期時間”。 存在顯式轉換(您是否缺少演員表?)

我嘗試了以下方法:

DateTime UpdatedTime = (DateTime)_objHotelPackageOrder.UpdatedDate == null 
    ? DateTime.Now : _objHotelPackageOrder.UpdatedDate;

您想使用null-coalescing operator ,它正是為此目的而設計的。

使用它,您最終會得到此代碼。

DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate ?? DateTime.Now;

MS 已經為此制定了一種方法,因此您不必使用空合並運算符。 功能上沒有區別,但對於非專家來說更容易一目了然地了解正在發生的事情。

DateTime updatedTime = _objHotelPackageOrder.UpdatedDate.GetValueOrDefault(DateTime.Now);

嘗試這個

DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate ?? DateTime.Now;

您可以使用簡單的演員表:

DateTime dtValue = (DateTime) dtNullAbleSource;

正如 Leandro Tupone 所說,您必須先檢查 var 是否為 null

您需要調用可為空的 DateTime 的Value屬性。 這將返回一個日期時間。

假設UpdatedDateDateTime? ,那么這應該工作:

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 中使用的一個片段,它使用可為空的日期/時間填充視圖

memDateLogin = m.memDateLogin ?? DateTime.MinValue

您也可以嘗試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;

您還可以使用從 C# 7.0 開始的IS 運算符

DateTime UpdatedTime = (_objHotelPackageOrder.UpdatedDate is DateTime myDate) ? myDate : DateTime.Now;

或者在一個案例中的區別

if (_objHotelPackageOrder.UpdatedDate is DateTime UpdatedTime)
{
   ...
}

為了完整起見。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM