會更具體,我有DateTime?生日如果默認值爲空並轉換爲字符串
我的問題是在這種情況下會發生什麼:
lblBirthDate.Text = myObject.BirthDate.GetValueOrDefault().ToString();
如果出生日期將是無效的。我安裝了resharper,它並沒有警告我我可能在那裏出現空問題...
會更具體,我有DateTime?生日如果默認值爲空並轉換爲字符串
我的問題是在這種情況下會發生什麼:
lblBirthDate.Text = myObject.BirthDate.GetValueOrDefault().ToString();
如果出生日期將是無效的。我安裝了resharper,它並沒有警告我我可能在那裏出現空問題...
如果BirthDate
是null
,您將得到默認實例DateTime
的本地化字符串表示形式。也就是說,您將獲得00:00:00.0000000,0001年1月1日的字符串表示形式。
您不會從ReSharper收到警告,因爲您在那裏沒有空問題。在Nullable<T>
的空實例上調用Nullable<T>.GetValueOrDefault
不是運行時異常。相反,如果您有空實例,您將獲得默認值。這正是GetValueOrDefault
的含義:獲得Value
如果HasValue
是true
,否則獲取底層結構類型的默認值。
我敢肯定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
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;
爲什麼不嘗試一下,告訴我們什麼? – asawyer