我正在阅读一本 .NET 书籍,在其中一个代码示例中有一个包含此字段的类定义:
private DateTime? startdate
是什么DateTime?
意思?
这是一个可以为空的日期时间。?
在原始类型/结构表明它是可为空的版本之后。
DateTime 是一个永远不能为空的结构。来自MSDN:
DateTime 值类型表示日期和时间,其值范围从 0001 年 1 月 1 日午夜 12:00:00 Anno Domini 或 AD(也称为 Common Era 或 CE)到 9999 年 12 月 31 日晚上 11:59:59广告 (CE)
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);
}
}
约会时间?在语法上等同于Nullable<DateTime>。
它相当于 Nullable<DateTime>。您可以附加“?” 任何原始类型或结构。
它基本上为您提供了原语的额外状态。它可以是一个值,也可以为空。它在不需要分配值的情况下很有用。因此,您可以将其分配为 null 以表示没有值,而不是使用例如 datetime.min 或 max。
正如我们所知,DateTime 是一个结构意味着 DateTime 是一个值类型,所以你得到一个 DateTime 对象,而不是一个引用,因为 DateTime 不是一个类,当你声明一个该类型的字段或变量时,你不能用 null 初始化因为值类型不接受空值。就像 int 不能为空一样。所以 DateTime 对象永远不会为空,因为它不是引用。
但有时我们需要可为空的变量或值类型的字段,那时我们使用问号将它们设为可空类型,以便它们允许为空。
例如:-
约会时间?日期=空;
诠释?整数值 = 空;
在上面的代码中,变量date是 DateTime 的一个对象,或者它为 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; }
}
If you declare DateTime As Null In Procedure Then You get an error stating DateTime Object Can never be Null so you need to add ? After DateTime that will say DateTime is Nullable too.
Hope This Help!