[英]what happens if default value is null and convert to string
更具體地說,我有DateTime嗎? 生日
我的問題是在這種情況下會發生什么:
lblBirthDate.Text = myObject.BirthDate.GetValueOrDefault().ToString();
如果BirthDate將為null。 我已經安裝了Resharper,但並沒有警告我那里可能存在null問題...
如果BirthDate
為null
,則將獲取DateTime
的默認實例的本地化字符串表示形式。 也就是說,您將獲得0001年1月1日00:00:00.0000000的字符串表示形式。
ReSharper不會向您發出警告,因為那里沒有空問題。 這不是一個運行時異常調用Nullable<T>.GetValueOrDefault
上的空實例Nullable<T>
相反,如果您具有空實例,則將獲得默認值。 這就是GetValueOrDefault
含義:如果HasValue
為true
,則獲取Value
;否則,獲取底層結構類型的默認值。
我很確定GetValueOrDefault
在為null的情況下返回DateTime.MinValue
。
您可以通過以下幾種方式處理空值:
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不會顯示任何錯誤,因為DateTime的默認值為1/1/1 00:00:00。 您可以使用默認運算符獲取任何類型的默認值:
DateTime defaultDateTime = default(DateTime);
此值與DateTime.MinValue
完全相同
如果需要使用空值,則必須將屬性聲明為可空值:
DateTime? BirthDay { get; set; };
可為空的DateTime DateTime?
即使值是null,也支持無錯誤地調用ToString()
如果是,則提供一個空字符串。 然后,您不必擔心null。
使用可空的DateTime比使用特殊值來表示缺失值(例如default(DateTime)
,即DateTime.MinValue;
default(DateTime)
具有更大的一致性DateTime.MinValue;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.