2008-09-21 125 views
59

我正在讀一本書的.Net,而在代碼示例一個有一類定義與此字段:什麼是「DateTime?」在C#中是什麼意思?

private DateTime? startdate 

是什麼DateTime?意思?

+0

可能的重複https://stackoverflow.com/questions/2690866/what-is-the-purpose-of-a-question-mark-after-a-type-for-example-int-myvariabl – Fandango68 2017-10-18 05:58:32

回答

117

由於DateTimestruct,不是class,你會得到一個DateTime對象,不是參考,當你聲明該類型的字段或變量。而且,與int不能爲null一樣,這個DateTime對象也不能爲空,因爲它不是一個引用。

添加問號把它變成一個nullable type,這意味着要麼它是一個對象DateTime它是null

DateTime?是句法糖Nullable<DateTime>,其中Nullable本身是struct

23

這是一個可以爲空的DateTime。原始類型/結構指示它是可空的版本之後的?

DateTime是一個永遠不能爲空的結構。從MSDN

DateTime值類型表示值的範圍從午夜12:00:00,1月1日,0001公元或AD〜11(也稱爲共同的時代,或CE)的日期和時間:公元9999年12月31日下午59:59(行政長官)

DateTime?可以爲空。

+1

「DateTime ?」是C#中的等價「Nullable 」的語法糖。 – 2011-04-04 13:25:13

10

它相當於可以爲空的< DateTime>。你可以追加「?」到任何原始類型或結構。

13

A 作爲值類型的後綴允許空分配,這將是更不可能的。

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); 
     } 
    } 

日期時間?合成等價於可空<日期時間>

5

它基本上給你一個額外的原始狀態。它可以是一個值,也可以是null。在不需要分配值的情況下它可以是有用的。因此而不是使用例如datetime。分鐘或最大,你可以將它賦值爲null來表示沒有值。

+1

「原始」與「結構」不完全相同;這個語法適用於結構體 – 2010-12-15 07:21:03

1

正如我們所知道的,DateTime是一個結構意味着DateTime是一個值類型,所以當您聲明一個字段或該類型的變量時,您不能獲得一個DateTime對象,而不是一個引用,因爲DateTime不是一個類, null因爲值類型不接受null。與int相同,不能爲null。所以DateTime對象永遠不會爲空,因爲它不是一個引用。

但是有時我們需要可以爲空的變量或字段的值類型,那時候我們使用問號來使它們成爲可空類型,所以它們允許null。

例如: -

日期時間? date = null;

int? intvalue = null;

在上面的代碼中,變量日期是DateTime的一個對象,或者它是空的。相同的intvalue。