我正在读一本.NET书,在其中的一个代码示例中,此字段有一个类定义:
private DateTime? startdate
什么DateTime?
意思
Answers:
这是可以为空的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。
一个?作为值类型的后缀,则允许进行空值分配,这在其他情况下是不可能的。
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>。
等效于Nullable <DateTime>。您可以附加“?” 任何原始类型或结构。
它基本上为您提供了图元的额外状态。它可以是一个值,也可以为null。在不需要分配值的情况下很有用。因此,可以不使用例如datetime.min或max而是将其分配为null来表示没有值。
众所周知,DateTime是一个结构,意味着DateTime是一个值类型,因此您将获得一个DateTime对象,而不是一个引用,因为DateTime不是一个类,当您声明该类型的字段或变量时,您不能以null开头,因为值类型不接受null。以与int相同的方式,不能为null。所以DateTime对象永远不会为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也可以为Nullable。
希望这个帮助!