2012-12-19 61 views
132

是否有理由選擇其中之一?新DateTime()與默認(DateTime)

DateTime myDate = new DateTime(); 

DateTime myDate = default(DateTime); 

他們兩人都是相等1/1/0001 12:00:00 AM

+26

等於'DateTime.MinValue',所以你也可以只做到'日期時間指明MyDate =日期時間.MinValue':/ – Lloyd

+13

@Lloyd大部分時間......但不是默認參數DateTime.MinValue不是一個編譯時間常量 - 但是默認的(DateTime)/ new DateTime()是。 – Ricibob

+7

只是爲了澄清@ Ricibob的優秀評論,因爲它很重要:如果您使用可選參數創建方法,則只能使用'default(DateTime)'或'New DateTime()'。這些都是*編譯時間常量*,對於可選參數值是必需的。如果不需要編譯時間常量,那麼'default(DateTime)','new DateTime()'和'DateTime.MinValue'是可以互換的。 – leanne

回答

139

不,它們是相同的。

default(),對於任何值類型(DateTime是一個值類型)將始終調用無參數構造函數。

+22

FWIW;在C#6中,這種行爲將會改變。 C#6爲結構引入了[無參數構造函數](https://roslyn.codeplex.com/discussions/562559),它允許'new'的行爲不同於'default(T)'的行爲。 – vcsjones

+19

有人可能會認爲'default(DateTime)'更能描述程序員的意圖,因此通常更有利。 –

+8

@vcsjones然而,在C#6.0的最終發佈之前,它已被刪除。 – nawfal

13

答案是否定的。請記住,在這兩種情況下,mdDate.Kind = DateTimeKind.Unspecified

因此它可能是更好的做到以下幾點:

DateTime myDate = new DateTime(1, 1, 1, 0, 0, 0, DateTimeKind.Utc); 

myDate.Kind屬性是隻讀的,所以構造函數被調用後,不能更改。

+2

如何回答OP的問題? –

+32

請查看我答案的前4個單詞。 –

+2

我會反駁這個。默認的'DateTime'作爲一個未設置值的值非常有用,只需比較'default(DateTime)'。什麼用途是非默認的'01/01/0001'值? – Rawling

16

如果您想在方法中使用DateTime參數的默認值,則只能使用默認值(DateTime)。

下面的行不會編譯:

private void MyMethod(DateTime syncedTime = DateTime.MinValue) 

此行將編譯:

private void MyMethod(DateTime syncedTime = default(DateTime)) 
+0

這就是我正在尋找的答案。謝謝! – GigaKatowice

+0

當然DateTime.MinValue不能編譯?可選參數必須是編譯時常量,而MinValue不是。雖然Date(DateTime)和new DateTime()都是有效的(這實際上很有趣,因爲DateTime值x = default(DateTime)無效,因爲DateTime值不能被聲明爲編譯時常量) –