我需要知道
之间是否存在差异DateTime? obj
和
Nullable<DateTime> obj
如果是这样的话,他们的用例是什么?
答案 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)
语法T?是Nullable{T}的简写,其中T是值类型。这两种形式是可以互换的。
没有区别,正如您在以下反编译的MSIL代码中看到的那样:
这是原始来源:
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
,而是针对任何其他值类型。