[英]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.