77

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

private DateTime? startdate

是什么DateTime?意思?

4

7 回答 7

139

因为DateTimeis astruct而不是 a ,所以当您声明该类型的字段或变量时class,您会得到一个DateTime object,而不是reference 。

而且,与 an intcannot be一样null,这个DateTime对象永远不可能 be null,因为它不是引用。

添加问号会将其变为可空类型,这意味着它要么DateTime对象,要么null

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

于 2008-09-21T00:20:10.263 回答
23

这是一个可以为空的日期时间。?在原始类型/结构表明它是可为空的版本之后。

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

DateTime 值类型表示日期和时间,其值范围从 0001 年 1 月 1 日午夜 12:00:00 Anno Domini 或 AD(也称为 Common Era 或 CE)到 9999 年 12 月 31 日晚上 11:59:59广告 (CE)

DateTime?但是可以为空。

于 2008-09-21T00:16:34.173 回答
14

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

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

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

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

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

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

于 2008-09-21T00:20:56.377 回答
10

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

于 2008-09-21T00:19:44.290 回答
5

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

于 2008-09-21T00:21:05.583 回答
1

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

但有时我们需要可为空的变量或值类型的字段,那时我们使用问号将它们设为可空类型,以便它们允许为空。

例如:-

约会时间?日期=空;

诠释?整数值 = 空;

在上面的代码中,变量date是 DateTime 的一个对象,或者它为 null。整数值相同。

于 2015-05-15T07:09:37.470 回答
0
public class ReportsMapper : CommonMapper
{


    public DateTime? cb_Bill_From_Date { get; set; }

    public DateTime? cb_Bill_To_Date { get; set; }

    public DateTime? tff_Bill_From_Date { get; set; }
    public DateTime? tff_Bill_To_Date { get; set; }
}

If you declare DateTime As Null In Procedure Then You get an error stating DateTime Object Can never be Null so you need to add ? After DateTime that will say DateTime is Nullable too.

Hope This Help!

于 2019-12-23T10:55:34.257 回答