繁体   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