What does “DateTime?” mean in C#?
我正在阅读一本.NET书籍,在其中一个代码示例中,有一个带有此字段的类定义:
1 | private DateTime? startdate |
由于
与
添加问号会使它变成一个可以为空的类型,这意味着它要么是一个
它是一个可以为空的日期时间。基元类型/结构之后的
datetime是一个永远不能为空的结构。来自MSDN:
The DateTime value type represents dates and times with values ranging from 12:00:00 midnight, January 1, 0001 Anno Domini, or A.D. (also known as Common Era, or C.E.) through 11:59:59 P.M., December 31, 9999 A.D. (C.E.)
但是,
A?作为值类型的后缀,允许不可能的空赋值。
http://msdn.microsoft.com/en-us/library/b3h38hb0.aspx
Represents an object whose underlying
type is a value type that can also be
assigned a null reference.
这意味着你可以这样写:
1 2 3 4 5 6 7 8 9 | DateTime? a = null; if (!a.HasValue) { a = DateTime.Now; if (a.HasValue) { Console.WriteLine(a.Value); } } |
日期时间?在语法上等价于nullable
它相当于nullable
它基本上为原语提供了一个额外的状态。它可以是一个值,也可以是空值。它在不需要分配值的情况下很有用。因此,您不必使用datetime.min或max,而是可以将其指定为空,表示没有值。
如我们所知,datetime是一个结构,意味着datetime是一个值类型,所以您得到一个datetime对象,而不是一个引用,因为datetime不是一个类,当您声明一个该类型的字段或变量时,不能以null开头,因为值类型不接受null。与int相同,int不能为空。所以datetime对象永远不为空,因为它不是引用。
但有时我们需要可以为空的变量或值类型的字段,这一次我们使用问号使它们成为可以为空的类型,这样它们就允许为空。
例如:
日期时间?日期=NULL;
int?IntValue=空;
在上面的代码中,变量日期是datetime的对象,或者为空。IntValue相同。