我正在阅读.Net书籍,在其中一个代码示例中,有一个带有此字段的类定义:
private DateTime? startdate
DateTime?
是什么意思?
由于qazxsw poi是qazxsw poi,而不是qazxsw poi,当你声明该类型的字段或变量时,你得到一个DateTime
对象,而不是引用。
并且,就像struct
不能是class
一样,所以这个DateTime
对象永远不会是int
,因为它不是参考。
添加问号将其变成null
,这意味着要么它是DateTime
对象,要么是null
。
nullable type是DateTime
的语法糖,其中null
本身就是DateTime?
。
这是一个可以为空的DateTime。原始类型/结构之后的Nullable<DateTime>
表明它是可以为空的版本。
DateTime是一个永远不能为null的结构。来自Nullable
:
DateTime值类型表示日期和时间,其值范围为午夜12:00,1月1日,0001 Anno Domini或AD(也称为Common Era,或CE)至9999年12月31日晚上11:59:59 AD(CE)
然而,struct
可以为null。
一个 ?作为值类型的后缀允许空值分配,这是不可能的。
?
表示一个对象,其基础类型是值类型,也可以为其指定空引用。
这意味着您可以编写如下内容:
MSDN
约会时间?在语法上等同于Nullable <DateTime>。
它相当于Nullable <DateTime>。你可以附加“?”任何原始类型或结构。
它基本上为基元提供了额外的状态。它可以是值,也可以为null。在不需要分配值的情况下,它可能很有用。因此,不是使用例如datetime.min或max,而是将其赋值为null以表示无值。
我们知道,DateTime是一个结构意味着DateTime是一个值类型,所以你得到一个DateTime对象,而不是一个引用,因为DateTime不是一个类,当你声明一个字段或该类型的变量时,你不能用null初始化因为值类型不接受null。与int一样,不能为null。所以DateTime对象永远不会为null,因为它不是引用。
但有时我们需要可空变量或值类型字段,那时我们使用问号使它们成为可空类型,因此它们允许null。
例如:-
约会时间? date = null;
诠释? intvalue = null;
在上面的代码中,变量日期是DateTime的对象,或者它是null。对于intvalue也是如此。