如果默认值为 null 并转换为字符串,会发生什么情况
本文关键字:什么情况 转换 默认值 null 如果 字符串 | 更新日期: 2023-09-27 18:33:21
更具体地说,我有日期时间?生日
我的问题是在这种情况下会发生什么:
lblBirthDate.Text = myObject.BirthDate.GetValueOrDefault().ToString();
如果出生日期将为空。我已经安装了锐化器,它并没有警告我那里可能有空问题......
如果BirthDate
null
,则得到 DateTime
的默认实例的本地化字符串表示形式。也就是说,您将获得 0001 年 1 月 1 日 00:00:00.0000000 的字符串表示形式。
您不会收到来自 ReSharper 的警告,因为您那里没有空问题。在Nullable<T>
的空实例上调用Nullable<T>.GetValueOrDefault
不是运行时异常。相反,如果您有空实例,您将获得默认值。这正是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
完全相同
如果需要使用 null,则必须将属性声明为可为 null:
DateTime? BirthDay { get; set; };
可为 null 的 DateTime DateTime?
支持调用ToString()
而不会出错,即使值为 null,如果是,则给出空字符串。然后,您不必担心空值。
可为空的日期时间比使用特殊值来表示缺失值(如default(DateTime)
)更一致,即 DateTime.MinValue;