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


Answers:


134

由于DateTime是astruct而不是a ,所以在声明该类型的字段或变量时会class得到一个DateTime 对象,而不是引用

并且,与int不能相同的方式相同null,因此该DateTime对象决不能为null,因为它不是引用。

加入问号把它变成一个空类型,这意味着要么它是一个DateTime对象,或者它是null

DateTime?是语法糖Nullable<DateTime>Nullable本身在哪里struct


23

这是可以为空的DateTime。?在原始类型/结构指示其为可空版本之后。

DateTime是一个永远不能为null的结构。从MSDN

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

DateTime? 可以为null。


1
“约会时间?” 是C#中等价的“ Nullable <DateTime>”的语法糖。
PeteStensønes2011年

14

一个作为值类型的后缀,则允许进行空值分配,这在其他情况下是不可能的。

http://msdn.microsoft.com/zh-CN/library/b3h38hb0.aspx

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

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

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

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



5

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


1
“原始”与“结构”不太相同;此语法适用于结构
Marc Gravell

1

众所周知,DateTime是一个结构,意味着DateTime是一个值类型,因此您将获得一个DateTime对象,而不是一个引用,因为DateTime不是一个类,当您声明该类型的字段或变量时,您不能以null开头,因为值类型不接受null。以与int相同的方式,不能为null。所以DateTime对象永远不会为null,因为它不是引用。

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

例如:-

约会时间?日期= null;

诠释?intvalue = null;

在上面的代码中,变量date是DateTime的对象,或者为null。与intvalue相同。


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; }
}

如果在过程中将DateTime声明为Null,则会收到一条错误消息,指出DateTime对象永远不能为Null,因此需要添加?在DateTime之后,它将说DateTime也可以为Nullable。

希望这个帮助!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.