【问题标题】:Is Nullable DateTime work correct?Nullable DateTime 工作是否正确?
【发布时间】:2011-05-31 15:11:19
【问题描述】:

请检查以下代码

DateTime? tmp = new DateTime();
tmp = null;
return tmp.ToString();

它返回String.Empty。

对吗?

在第二行代码中引发异常可能会更好

【问题讨论】:

    标签: c# datetime


    【解决方案1】:

    是的,没错。来自documentation

    如果HasValue 属性为真,则为当前Nullable<T> 对象的值的文本表示形式;如果HasValue 属性为假,则为空字符串("")。

    还要注意Nullable<T>.Equals 和Nullable<T>.GetHashCode 在这种情况下不会抛出,但Nullable<T>.GetType 会 抛出。这是因为Object.Equals、Object.GetHashCode 和Object.ToString 被Nullable<T> 覆盖,但Object.GetType 没有被覆盖(因为它不能被标记为virtual)。

    【讨论】:

    • 好的,谢谢你的回答。但是您认为这是正确的方法吗?因为如果你将使用 String tmp = null; tmp.ToString() 会引发异常
    • 因为 HasValue 为 false 的可空类型不是 null 引用。从概念的角度来看,可为空的类型表示一个值类型,该值可能“丢失”。我们使用null 来表示何时缺少值,但这与null 引用不同。请注意,tmp.Value 将在 tmp 是可空类型的实例且 HasValue 为 false 的情况下抛出。缺少该值,因此尝试获取所述值应该并且确实会相应地抛出。
    猜你喜欢
    • 2012-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-24
    • 2017-10-15
    相关资源
    最近更新 更多