簡體   English   中英

如果默認值為null並轉換為字符串會發生什么

[英]what happens if default value is null and convert to string

更具體地說,我有DateTime嗎? 生日

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

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

如果BirthDate將為null。 我已經安裝了Resharper,但並沒有警告我那里可能存在null問題...

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

ReSharper不會向您發出警告,因為那里沒有空問題。 這不是一個運行時異常調用Nullable<T>.GetValueOrDefault上的空實例Nullable<T> 相反,如果您具有空實例,則將獲得默認值。 這就是GetValueOrDefault含義:如果HasValuetrue ,則獲取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.

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