“DateTime?”在C#中意味着什么?

问题描述 投票:67回答:6

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

private DateTime? startdate

DateTime?是什么意思?

c# .net datetime syntax nullable
6个回答
129
投票

由于qazxsw poi是qazxsw poi,而不是qazxsw poi,当你声明该类型的字段或变量时,你得到一个DateTime对象,而不是引用。

并且,就像struct不能是class一样,所以这个DateTime对象永远不会是int,因为它不是参考。

添加问号将其变成null,这意味着要么它是DateTime对象,要么是null

nullable typeDateTime的语法糖,其中null本身就是DateTime?


23
投票

这是一个可以为空的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。


13
投票

一个 ?作为值类型的后缀允许空值分配,这是不可能的。

?

表示一个对象,其基础类型是值类型,也可以为其指定空引用。

这意味着您可以编写如下内容:

MSDN

约会时间?在语法上等同于Nullable <DateTime>。


10
投票

它相当于Nullable <DateTime>。你可以附加“?”任何原始类型或结构。


5
投票

它基本上为基元提供了额外的状态。它可以是值,也可以为null。在不需要分配值的情况下,它可能很有用。因此,不是使用例如datetime.min或max,而是将其赋值为null以表示无值。


1
投票

我们知道,DateTime是一个结构意味着DateTime是一个值类型,所以你得到一个DateTime对象,而不是一个引用,因为DateTime不是一个类,当你声明一个字段或该类型的变量时,你不能用null初始化因为值类型不接受null。与int一样,不能为null。所以DateTime对象永远不会为null,因为它不是引用。

但有时我们需要可空变量或值类型字段,那时我们使用问号使它们成为可空类型,因此它们允许null。

例如:-

约会时间? date = null;

诠释? intvalue = null;

在上面的代码中,变量日期是DateTime的对象,或者它是null。对于intvalue也是如此。

© www.soinside.com 2019 - 2024. All rights reserved.