我正在阅读一本.Net书,在其中一个代码示例中有一个带有该字段的类定义:
private DateTime? startdate
DateTime?
是什么意思?
答案 0 :(得分:129)
由于DateTime
是struct
,而不是class
,因此您获得DateTime
对象,而不是参考,当您声明该类型的字段或变量时。
并且,与int
不能null
相同,因此此DateTime
对象永远不会是null
,因为它不是引用。
添加问号会将其变为nullable type,这意味着 它是DateTime
对象,或它是{{ 1}}。
null
是DateTime?
的语法糖,其中Nullable
本身就是Nullable<DateTime>
。
答案 1 :(得分:23)
这是一个可以为空的DateTime。原始类型/结构之后的?
表示它是可以为空的版本。
DateTime是一个永远不能为null的结构。来自MSDN:
DateTime值类型表示日期和时间,其值范围为午夜12:00,午夜,1月1日,0001 Anno Domini或AD(也称为Common Era,或CE)至12月11:59:59 PM公元31,9999(CE)
DateTime?
可以为null。
答案 2 :(得分:13)
?作为值类型的后缀允许空分配,这是不可能的。
http://msdn.microsoft.com/en-us/library/b3h38hb0.aspx
表示其底层的对象 type是一个值类型,也可以是 分配了一个空引用。
这意味着你可以这样写:
DateTime? a = null;
if (!a.HasValue)
{
a = DateTime.Now;
if (a.HasValue)
{
Console.WriteLine(a.Value);
}
}
DateTime?在语法上等同于 Nullable&lt; DateTime&gt; 。
答案 3 :(得分:10)
它相当于Nullable&lt;日期时间取代。你可以附加“?”任何原始类型或结构。
答案 4 :(得分:5)
它基本上为您提供了原语的额外状态。它可以是值,也可以为null。在不需要分配值的情况下,它可能很有用。因此,不是使用例如datetime.min或max,而是将其指定为null以表示无值。
答案 5 :(得分:1)
我们知道,DateTime是一个结构意味着DateTime是一个值类型,所以你得到一个DateTime对象,而不是一个引用,因为DateTime不是一个类,当你声明一个你不能用null初始化的那个类型的字段或变量时因为值类型不接受null。与int一样,不能为null。所以DateTime对象永远不会为null,因为它不是引用。
但有时候我们需要可空变量或值类型字段,那时我们使用问号使它们成为可空类型,因此它们允许为空。
例如: -
的DateTime? date = null;
INT? intvalue = null;
在上面的代码中,变量 date 是DateTime的对象,或者它是null。对于intvalue也一样。
答案 6 :(得分: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。
希望获得帮助!