如果DateTime对象不能为null,那么它在分配之前是什么?

时间:2011-07-06 15:19:38

标签: c#

如果尚未分配DateTime实例,它的值是什么?

要查看一个具体示例:在下面的类中,“UnassignedDateTime == null”会返回true吗?

如果是这样,那么这样的引用肯定是空的,但是没有赋值为null,这绝对是不合逻辑的吗?

class TestClass
{
    public DateTime AssignedDateTime {get; set;}
    public DateTime UnassignedDateTime {get; set;}

    public TestClass()
    {
        AssignedDateTime=DateTime.Now;
        //Not assigning other property
    }

}


我已经检查了类似问题的答案,但这是关于DateTime的?这是可空的.. How to check if DateTime object was not assigned?

7 个答案:

答案 0 :(得分:37)

设计决策恰好是default(DateTime)

DateTime.MinValue

default(T)是用作字段或数组成员时初始化的类型 default(int) == 0default(bool) == false等 所有引用类型的默认值当然是null

int i = default(int);是合法的,但这有点傻。但是,在通用方法中,T x = default(T);非常有用。

  

这样的引用肯定是null,但是没有赋值为null,这是非常不合逻辑的吗?

DateTime是一个值类型,(struct DateTime { ... })因此它不能是null。将它与null进行比较将始终返回false。

因此,如果您想查找分配的状态,可以将其与default(DateTime)进行比较,DateTime?可能不是您网域中的有效日期。否则,您将不得不使用可空类型{{1}}。

答案 1 :(得分:5)

如果您没有为其分配另一个值http://msdn.microsoft.com/en-us/library/system.datetime.minvalue.aspx

,则DateTime变量默认为DateTime.MinValue

答案 2 :(得分:3)

它可能保持DateTime.MinValue的值(此常量的值相当于00:00:00.0000000,0001年1月1日。)

答案 3 :(得分:1)

DateTime如果已初始化,则会达到最小值,但未设置。例如12:00:00 midnight, January 1, 0001

答案 4 :(得分:1)

另一种可能性是minvalue,我认为它是最初的。因为它在内部存储为整数,这是有意义的。

答案 5 :(得分:1)

目前无法检查,但我认为默认为:01/01/0001 00:00:00。

如果您调试了代码并将其悬停在属性上,它应该告诉您。

答案 6 :(得分:0)

由于DateTime结构不可为空(DataTime?),因此条件(UnassignedDateTime == null)始终为false。