日期时间的区别?并且可以为空的<datetime>

时间:2015-10-05 13:40:13

标签: c# .net datetime

我需要知道

之间是否存在差异
DateTime? obj

Nullable<DateTime> obj

如果是这样的话,他们的用例是什么?

4 个答案:

答案 0 :(得分:8)

没有区别。前者是第二种语法糖。他们编译完全相同的东西,Nullable<DateTime>,构建相同的IL。

void Main()
{
    DateTime? test1 = DateTime.Now;
    Nullable<DateTime> test2 = DateTime.Now;
}

IL DateTime?

IL_0001:  ldloca.s    00 // test1
IL_0003:  call        System.DateTime.get_Now
IL_0008:  call        System.Nullable<System.DateTime>..ctor

IL Nullable<DateTime>

IL_000E:  ldloca.s    01 // test2
IL_0010:  call        System.DateTime.get_Now
IL_0015:  call        System.Nullable<System.DateTime>..ctor

答案 1 :(得分:4)

没有区别。 DateTime?是编写Nullable<DateTime>的较短方式。实际类型为Nullable<DateTime>

答案 2 :(得分:1)

作为MSDN suggests

  

语法T?是Nullable{T}的简写,其中T是值类型。这两种形式是可以互换的。

没有区别,正如您在以下反编译的MSIL代码中看到的那样:

Nullables

这是原始来源:

static void Main(string[] args)
{
    DateTime? time = null;

    Nullable<DateTime> obj = null;

    if (false)
    {
        Console.WriteLine(time + " " + obj);
    }
}

都编译为Nullable<DateTime>DateTime?只是一种语法糖。

答案 3 :(得分:1)

来自MSDN

  

可空类型可以表示基础类型的所有值,以及   一个额外的空值。可以为空的类型以两种方式之一声明   方法:

     

System.Nullable&LT; T&GT;变量

     

-OR -

     

T'变量

意味着它们是等同物。但是,此行为并非特定于类型DateTime,而是针对任何其他值类型。

相关问题