什么是;日期时间;用C#表示什么意思?

什么是;日期时间;用C#表示什么意思?,c#,.net,datetime,syntax,nullable,C#,.net,Datetime,Syntax,Nullable,我正在读一本.NET的书,在其中一个代码示例中,有一个带有此字段的类定义: private DateTime? startdate 日期时间是什么意思?这是一个可空的日期时间?在基元类型/结构指示它是可空版本之后 DateTime是一个永远不能为null的结构。发件人: DateTime值类型表示日期和时间,其值范围为公元0001年1月1日午夜12:00:00(也称为普通纪元)到公元9999年12月31日下午11:59:59(C.E.) DateTime?可以为空。它相当于可为空的。您可以将“

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

private DateTime? startdate

日期时间是什么意思?这是一个可空的日期时间<代码>?在基元类型/结构指示它是可空版本之后

DateTime是一个永远不能为null的结构。发件人:

DateTime值类型表示日期和时间,其值范围为公元0001年1月1日午夜12:00:00(也称为普通纪元)到公元9999年12月31日下午11:59:59(C.E.)


DateTime?
可以为空。

它相当于可为空的。您可以将“?”附加到任何基元类型或结构。

因为
DateTime
是一个
struct
,而不是
,所以当您声明该类型的字段或变量时,您会得到一个
DateTime
对象,而不是引用

而且,与
int
不能
null
一样,这个
DateTime
对象永远不能
null
,因为它不是引用

添加问号会将其转换为,这意味着它要么是
DateTime
对象,要么是
null


DateTime?
Nullable
的语法糖,其中本身就是一个
struct

a作为值类型的后缀,允许空赋值,这在其他方面是不可能的

表示一个对象,该对象的底层 类型是一种值类型,也可以是 分配了一个空引用

这意味着您可以这样写:

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

DateTime?在语法上等同于Nullable

它基本上为原语提供了一个额外的状态。它可以是一个值,也可以是null。它在不需要指定值的情况下非常有用。因此,您不必使用datetime.min或max,而可以将其赋值为null以表示无值。

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

但有时我们需要可为null的变量或值类型的字段,这时我们使用问号使它们成为可为null的类型,以便它们允许为null

例如:-

约会时间?日期=空

智力?intvalue=null

在上面的代码中,变量date是DateTime的对象,或者为null。intvalue也是如此

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可以为null

希望这有帮助

“基元”与“结构”不完全相同;此语法用于结构“DateTime?”在C#中是语法糖,用于等价的“Nullable”。可能与