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

private DateTime? startdate

DateTime?是什么意思?

有帮助吗?

解决方案

由于 DateTime struct ,而不是 class ,因此你得到一个 DateTime object <当您声明该类型的字段或变量时,/ em>,而不是引用

并且,与 int 的方式不同, null ,因此 DateTime 对象永远不能 null ,因为它不是参考。

添加问号会将其变成 可空类型 ,这意味着 它是 DateTime 对象,它是<代码>空

DateTime? Nullable&lt; DateTime&gt; 的语法糖,其中 Nullable 本身就是 struct

其他提示

这是一个可以为空的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。

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

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;

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

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

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

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

例如: -

的DateTime? date = null;

INT? intvalue = null;

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top