【问题标题】:Difference between datetime? and nullable<DateTime> [duplicate]日期时间之间的区别?和 nullable<DateTime> [重复]
【发布时间】:2015-10-05 13:40:12
【问题描述】:

我想知道有没有区别

DateTime? obj

Nullable<DateTime> obj

如果是的话,它们的用例是什么?

【问题讨论】:

    标签: c# .net datetime


    【解决方案1】:

    没有区别。前者是后者的语法糖。它们编译成完全相同的东西,Nullable&lt;DateTime&gt;,构建相同的 IL。

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

    DateTime? 的 IL

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

    Nullable&lt;DateTime&gt; 的 IL

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

    【讨论】:

      【解决方案2】:

      没有区别。 DateTime? 是写 Nullable&lt;DateTime&gt; 的更短的方式。实际类型为Nullable&lt;DateTime&gt;

      【讨论】:

        【解决方案3】:

        作为MSDN suggests:

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

        没有区别,你可以在下面反编译的 MSIL 代码中看到:

        当这是原始来源时:

        static void Main(string[] args)
        {
            DateTime? time = null;
        
            Nullable<DateTime> obj = null;
        
            if (false)
            {
                Console.WriteLine(time + " " + obj);
            }
        }
        

        两者都编译为Nullable&lt;DateTime&gt;DateTime? 只是语法糖。

        【讨论】:

        • 投反对票的人请解释一下,这样我才能更好地回答。
        【解决方案4】:

        来自MSDN

        可空类型可以表示底层类型的所有值,并且 一个额外的空值。可空类型声明为以下两种之一 方式:

        System.Nullable 变量

        -或-

        T?变量

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

        【讨论】:

          猜你喜欢
          • 2012-02-22
          • 1970-01-01
          • 2023-03-29
          • 2020-10-19
          • 2011-10-29
          • 1970-01-01
          • 2018-01-29
          • 2021-05-08
          相关资源
          最近更新 更多