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

时间:2008-09-21 00:16:03

标签: c# .net datetime syntax nullable

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

private DateTime? startdate

DateTime?是什么意思?

7 个答案:

答案 0 :(得分:129)

由于DateTimestruct,而不是class,因此您获得DateTime 对象,而不是参考,当您声明该类型的字段或变量时。

并且,与int不能null相同,因此此DateTime对象永远不会是null,因为它不是引用。

添加问号会将其变为nullable type,这意味着 它是DateTime对象,它是{{ 1}}。

nullDateTime?的语法糖,其中Nullable本身就是Nullable<DateTime>

答案 1 :(得分:23)

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

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

  

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

DateTime?可以为null。

答案 2 :(得分:13)

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

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

  

表示其底层的对象   type是一个值类型,也可以是   分配了一个空引用。

这意味着你可以这样写:

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

DateTime?在语法上等同于 Nullable&lt; DateTime&gt;

答案 3 :(得分:10)

它相当于Nullable&lt;日期时间取代。你可以附加“?”任何原始类型或结构。

答案 4 :(得分:5)

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

答案 5 :(得分:1)

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

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

例如: -

的DateTime? date = null;

INT? intvalue = null;

在上面的代码中,变量 date 是DateTime的对象,或者它是null。对于intvalue也一样。

答案 6 :(得分:0)

public class ReportsMapper : CommonMapper
{


    public DateTime? cb_Bill_From_Date { get; set; }

    public DateTime? cb_Bill_To_Date { get; set; }

    public DateTime? tff_Bill_From_Date { get; set; }
    public DateTime? tff_Bill_To_Date { get; set; }
}

如果在过程中将DateTime声明为Null,则会收到一条错误消息,指出DateTime对象永远不能为Null,因此需要添加?在DateTime之后,它将说DateTime也可以为Nullable。

希望获得帮助!