什么是"DateTime?" 在C#中意味着什么?

Alv*_*n S 70 .net c# syntax datetime nullable

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

private DateTime? startdate
Run Code Online (Sandbox Code Playgroud)

什么DateTime?意思?

Tho*_*mas 131

因为DateTime是a struct而不是a ,所以当声明该类型的字段或变量时class,会得到一个DateTime 对象,而不是一个引用.并且,以与int不可能相同的方式null,因此该DateTime对象永远不能为空,因为它不是引用.

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

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


Dan*_*ger 23

这是一个可以为空的DateTime.?在原始类型/结构表明它是可以为空的版本之后.

DateTime是一个永远不能为null的结构.来自MSDN:

DateTime值类型表示日期和时间,其值范围为午夜12:00,1月1日,0001 Anno Domini或AD(也称为Common Era,或CE)至9999年12月31日晚上11:59:59 AD(CE)

DateTime? 但是可以为null.


Jor*_*ira 13

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

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);
        }
    }
Run Code Online (Sandbox Code Playgroud)

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


Ted*_*ott 10

它相当于Nullable <DateTime>.你可以附加"?" 任何原始类型或结构.


mat*_*ant 5

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