“ DateTime是什么?”在C#中意味着什么?
题
我正在阅读一本.Net书,在其中一个代码示例中有一个带有该字段的类定义:
private DateTime? startdate
DateTime?
是什么意思?
其他提示
这是一个可以为空的DateTime。原始类型/结构之后的?
表示它是可以为空的版本。
DateTime是一个永远不能为null的结构。来自 MSDN :
DateTime值类型表示日期和时间,其值范围为午夜12:00,午夜,1月1日,0001 Anno Domini或AD(也称为Common Era,或CE)至12月11:59:59 PM公元31,9999(CE)
DateTime?
可以为null。
?作为值类型的后缀允许空分配,这是不可能的。
http://msdn.microsoft.com/en-us/library/ b3h38hb0.aspx
表示其底层的对象 type是一个值类型,也可以是 分配了一个空引用。
这意味着你可以这样写:
DateTime? a = null;
if (!a.HasValue)
{
a = DateTime.Now;
if (a.HasValue)
{
Console.WriteLine(a.Value);
}
}
DateTime?在语法上等同于 Nullable< DateTime> 。
它相当于Nullable<日期时间取代。您可以追加“?”任何原始类型或结构。
它基本上为您提供了原语的额外状态。它可以是值,也可以为null。在不需要分配值的情况下,它可能很有用。因此,不是使用例如datetime.min或max,而是将其指定为null以表示无值。
我们知道,DateTime是一个结构意味着DateTime是一个值类型,所以你得到一个DateTime对象,而不是一个引用,因为DateTime不是一个类,当你声明一个你不能用null初始化的那个类型的字段或变量时因为值类型不接受null。与int一样,不能为null。所以DateTime对象永远不会为null,因为它不是引用。
但有时候我们需要可空变量或值类型字段,那时我们使用问号使它们成为可空类型,因此它们允许为空。
例如: -
的DateTime? date = null;
INT? intvalue = null;
在上面的代码中,变量 date 是DateTime的对象,或者它是null。对于intvalue也一样。