我正在阅读一本.NET书籍,在其中一个代码示例中,有一个类定义,其中包含这个字段:
private DateTime? startdate
DateTime?
是什么意思?
这是一个可为空的 DateTime。原始类型/结构后面的 ?
表示它是可为空的版本。
DateTime 是一个无法为 null 的结构。根据 MSDN:
DateTime 值类型表示从公元年(也称为“公元”或“C.E.”)0001 年 1 月 1 日午夜 12:00:00 到公元年(C.E.)9999 年 12 月 31 日晚上 11:59:59 的日期和时间值。
但 DateTime?
可以为空。
在值类型的末尾添加?允许进行空赋值,而这在其他情况下是不可能的。
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);
}
}
DateTime?在语法上等同于Nullable<DateTime>。
这相当于可空的< DateTime>。你可以在任何基本类型或结构体后添加“?”来表示其可为空。
它基本上为原始类型提供了一个额外的状态。它可以是一个值,也可以是null。在不需要分配值的情况下,它非常有用。因此,与其使用例如datetime.min或max,您可以将其赋值为null来表示没有值。
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也是可为空的。
希望这可以帮助到您!