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

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

private DateTime? startdate 

DateTime? 意思?

由于DateTime是一个struct ,而不是一个class ,所以当你声明一个types的字段或variables时,你会得到一个DateTime 对象 ,而不是一个引用 。 而且,就像int不能为null ,这个DateTime对象也不能为null,因为它不是一个引用。

添加问号会将其变成空的types ,这意味着它既可以是DateTime对象, 可以是null

DateTime?Nullable<DateTime>语法糖,其中Nullable本身就是一个struct

这是一个可以空的DateTime。 ? 在原始types/结构之后指示它是可空的版本。

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

date时间值types表示date和时间,值从1999年1月1日午夜12:00:00开始,直到9999年12月31日晚11:59:59,Anno Domini或AD(也称为Common Era或CE) AD(CE)

DateTime? 可以是null。

A 作为值types的后缀允许空分配,这将是更不可能的。

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

表示一个对象,其基础types是一个值types,也可以分配一个空引用。

这意味着你可以写这样的东西:

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

约会时间? 在合成上与Nullable <DateTime>等效。

它相当于可空<DateTime>。 你可以追加“?” 到任何原始types或结构。

它基本上给你一个额外的原始状态。 它可以是一个值,也可以是null。 在不需要赋值的情况下,它可以是有用的。 因此,而不是使用例如datetime.min或max,您可以将其指定为null来表示没有值。

正如我们所知,DateTime是一个结构意味着DateTime是一个值types,所以你得到一个DateTime对象,而不是一个引用,因为DateTime不是一个类,当你声明一个字段或variables的types,你不能初始化为null因为值types不接受null。 与int相同的方式不能为null。 所以DateTime对象永远不会为null,因为它不是一个引用。

但是有时我们需要可以为空的variables或值types的字段,那时候我们使用问号来使它们成为可空types,所以它们允许空值。

例如:-

约会时间? date = null;

诠释? intvalue = null;

在上面的代码中,variablesdate是DateTime的对象,或者是null。 相同的intvalue。