如果默认值为null并转换为字符串会发生什么

bok*_*kie 0 c#

更具体一点,我有DateTime?生日

我的问题是在这种情况下会发生什么:

lblBirthDate.Text = myObject.BirthDate.GetValueOrDefault().ToString();
Run Code Online (Sandbox Code Playgroud)

如果BirthDate为null.我安装了resharper,并没有警告我,那里可能有一个空问题...

jas*_*son 6

如果BirthDatenull,则获取默认实例的本地化字符串表示形式DateTime.也就是说,您将获得0001年1月1日00:00:00.0000000的字符串表示.

您没有收到ReSharper的警告,因为那里没有空问题.调用Nullable<T>.GetValueOrDefaulta的null实例不是运行时异常Nullable<T>.相反,如果您有一个null实例,则会获得默认值.这正是GetValueOrDefault意味着:得到Value,如果HasValuetrue,否则得到的基本结构类型的默认值.

  • @SPFiredrake:不,那不对.如果在`Nullable <T>`的null实例上调用`ToString`,则会得到`String.Empty`.如果在`Nullable <T>`上调用`GetValueOrDefault`,则得到`default(T)`.然后,如果你在那上面调用`ToString`,那么你得到一个'default(T)`的字符串表示.因此,`Nullable <T> .GetValueOrDefault().ToString()!= Nullable <T> .ToString()`如果实例是'null`,除非`default(T)`的字符串表示恰好是`String.空`(例如,它不是'DateTime`). (3认同)