时间类 “DateTime?”在C#中意味着什么?




datetime now tostring格式 (4)

我正在阅读.Net书籍,在其中一个代码示例中,有一个带有此字段的类定义:

private DateTime? startdate

DateTime? 意思?

https://code.i-harness.com


一个 作为值类型的后缀允许空值分配,这是不可能的。

http://msdn.microsoft.com/en-us/library/b3h38hb0.aspx

表示一个对象,其基础类型是值类型,也可以为其指定空引用。

这意味着您可以编写如下内容:

    DateTime? a = null;
    if (!a.HasValue)
    {
        a = DateTime.Now;
        if (a.HasValue)
        {
            Console.WriteLine(a.Value);
        }
    }

约会时间? 在语法上等同于Nullable <DateTime>


它基本上为你提供了原语的额外状态。 它可以是值,也可以为null。 在不需要分配值的情况下,它可能很有用。 因此,不是使用例如datetime.min或max,而是将其赋值为null以表示无值。


我们知道,DateTime是一个结构意味着DateTime是一个值类型,所以你得到一个DateTime对象,而不是一个引用,因为DateTime不是一个类,当你声明一个字段或该类型的变量时,你不能用null初始化因为值类型不接受null。 与int一样,不能为null。 所以DateTime对象永远不会为null,因为它不是引用。

但有时我们需要可空变量或值类型字段,那时我们使用问号使它们成为可空类型,因此它们允许null。

例如:-

约会时间? date = null;

诠释? intvalue = null;

在上面的代码中,变量日期是DateTime的对象,或者它是null。 对于intvalue也是如此。


由于DateTimestruct而不是class ,因此在声明该类型的字段或变量时,将获得DateTime 对象 ,而不是引用 。 并且,与int不能为null方式相同,此DateTime对象也不能为null,因为它不是引用。

添加问号会将其转换为可空类型 ,这意味着它既可以是DateTime对象, 可以为null

DateTime?Nullable<DateTime>语法糖,其中Nullable本身就是一个struct





nullable