2010-09-29 40 views
2

我今天注意到,如果您聲明一個可爲空的DateTime對象,那麼您不會獲得與具有標準DateTime對象時所做的功能相同的一組函數。.NET中的可空類型缺少方法

例如:

DateTime? nullableDT = DateTime.Now; 
DateTime regularDT = DateTime.Now; 
上面nullableDT的代碼不能使用任何的以下功能

ToFileTime 
ToFileTimeUtc 
ToLocalTime 
ToLongDateString 
ToLongTimeString 
ToOADate 
ToShortDateString 
ToShortTimeString 
ToString(IFormatProvider) 
ToString(String) 
ToString(String, IFormatProvider) 
ToUniversalTime 

這是短列表中,目前沒有可用的更多的方法。

爲什麼.NET的行爲如此呢?我通過在我的可空日期周圍拋出Convert.ToDateTime()來解決這個問題,但這似乎很糟糕...有更好的方法嗎?

回答

7

這是因爲您需要撥打Nullable<T>.Value才能獲得實際的DateTime值。

+6

您也可以考慮使用'可空 .GetValueOrDefault()''如果是HasValue'虛假不引發InvalidOperationException。 – codekaizen 2010-09-30 00:10:17

3

A Nullable<T>不是T,它只是包裝T。所以它沒有在T上定義成員。如果您要訪問的T的方法,你可以這樣做:

if (nullableDT.HasValue) 
{ 
    Console.WriteLine(nullableDT.Value.ToShortTimeString()); 
    ... 
}