2010-11-03 32 views
1

有人可以解釋使用C#4.0編寫的以下方法簽名有什麼問題嗎?爲什麼我不能使用DateTime.MinValue和int.MinValue作爲C#4.0中的可選值?

public void Test(string arg1 = string.Empty, DateTime arg2 = DateTime.MinValue){} 

我明白檢查編譯時間上的String.Empty之間「」與區別,但肯定的是可選參數已經實施的方式C#4.0是相當不夠的,如果你不能聲明一個合理的價值型null樣式比較?

+0

如果arg2 = DateTime.MinValue,它會一直是這個常量值嗎?編譯器的眼中可能是多餘的? – brumScouse 2010-11-03 18:06:49

+0

你得到的錯誤是什麼? – dotariel 2010-11-03 18:07:19

+0

可能的重複[不能使用String.Empty作爲C#中可選參數的默認值 - 那有什麼意義?](http://stackoverflow.com/questions/2701314/cannot-use-string-empty-as- a-default-value-for-an-an-optional-in-c-sharp) – nawfal 2013-05-16 10:59:09

回答

6

因爲DateTime.MinValueDateTime.MaxValue沒有編譯時間常數 - 他們是由DateTime的靜態構造函數在運行時初始化readonly領域。

參見const字段(其編譯時間常數)和readonly字段(其不是)之間的差值:What is the difference between const and readonly?

+0

Tim,對不起,我應該已經更清楚了。我明白他們不是'設計時間常量,但語言設計時間支持當然應該能夠動態地考慮這種情況? – 2010-11-08 09:12:40

+0

可選參數要求您提供編譯時常量。你不得不問語言設計師爲什麼,但從根本上說,.NET只支持編譯時常量的一小組數據類型。 – 2010-11-08 10:18:22

0

可以作爲參數值僅文字值,恆定值以及新對象實例使用。

相關問題