2012-05-07 119 views
0

會更具體,我有DateTime?生日如果默認值爲空並轉換爲字符串

我的問題是在這種情況下會發生什麼:

lblBirthDate.Text = myObject.BirthDate.GetValueOrDefault().ToString(); 

如果出生日期將是無效的。我安裝了resharper,它並沒有警告我我可能在那裏出現空問題...

+5

爲什麼不嘗試一下,告訴我們什麼? – asawyer

回答

6

如果BirthDatenull,您將得到默認實例DateTime的本地化字符串表示形式。也就是說,您將獲得00:00:00.0000000,0001年1月1日的字符串表示形式。

您不會從ReSharper收到警告,因爲您在那裏沒有空問題。在Nullable<T>的空實例上調用Nullable<T>.GetValueOrDefault不是運行時異常。相反,如果您有空實例,您將獲得默認值。這正是GetValueOrDefault的含義:獲得Value如果HasValuetrue,否則獲取底層結構類型的默認值。

+0

它不會是一個'NullReferenceException'嗎? – gdoron

+0

@gdoron - 不可爲空。 – Oded

+0

@Oded。錯過了那一點。謝謝 – gdoron

2

我敢肯定GetValueOrDefault返回DateTime.MinValue的情況下爲null。

這裏是你可以處理空值的幾種方法:

DateTime? myNullDate = null; 

DateTime myDate; 
myDate = myNullDate ?? DateTime.Now; // myDate => DateTime.Now 
myDate = myNullDate ?? default(DateTime); // myDate => DateTime.MinValue 
myDate = myNullDate.GetValueOrDefault(DateTime.Now); // myDate => DateTime.Now 
myDate = myNullDate.GetValueOrDefault(); // myDate => DateTime.MinValue 
0

ReSharper的不會告訴你任何錯誤,因爲日期時間的默認值是1/1/1 00:00:00。

DateTime defaultDateTime = default(DateTime); 

這個值是完全一樣DateTime.MinValue

如果你需要使用空值,您必須聲明你的財產爲可爲空:您可以使用默認的操作員可以爲任何類型的默認值

DateTime? BirthDay { get; set; }; 

可以爲空的DateTime DateTime?支持在沒有錯誤的情況下調用ToString(),即使該值爲null,如果是,也會給出空字符串。那麼你不必擔心空值。

更加使用可爲空的DateTime比擁有一個特殊的值來表示遺漏值,像default(DateTime)一致,即DateTime.MinValue;

相關問題