我想有一個方法的可選日期參數(默認爲MinValue),以檢查用戶是否實際提供了一個值(提供MinValue無效),但我不允許顯然它不是一個編譯時常量。C# - 爲什麼DateTime.MinValue和MaxValue不是編譯時常量?
根據the MSDN page,「該常數的值等於00:00:00.0000000,0001年1月1日」。
那麼,爲什麼編譯時不是常量?爲什麼它不同於傳入Int32.MinValue,這是允許的?
我想有一個方法的可選日期參數(默認爲MinValue),以檢查用戶是否實際提供了一個值(提供MinValue無效),但我不允許顯然它不是一個編譯時常量。C# - 爲什麼DateTime.MinValue和MaxValue不是編譯時常量?
根據the MSDN page,「該常數的值等於00:00:00.0000000,0001年1月1日」。
那麼,爲什麼編譯時不是常量?爲什麼它不同於傳入Int32.MinValue,這是允許的?
解決方法:使用可爲空的參數。因爲IMO的特殊價值顯然是不同的,而不僅僅是一個正常的價值,所以反正它更清潔。
void A(DateTime? p=null)
{
}
另一個替代方案是:
void A(DateTime p=default(DateTime))
{
}
其中示出了默認參數可用於用戶定義類型default(T)
作爲有效的默認參數值。
或者只是爲不同數量的參數重載方法。
這回答了我隱含的問題,'我該怎麼做我想做的事情?',謝謝:) – Alex
你可以嘗試使用['readonly'](http://msdn.microsoft.com/en- us/library/acdd6hb7(v = vs.71).aspx)如果您希望確保該值不會更改。我相信這可以與可空類型['?'](http://msdn.microsoft.com/en-us/library/1t3y8s4s(v = vs80).aspx)結合使用。 – eternalmatt
@eternalmatt我不關注 - 這有什麼幫助有一個可選的DateTime參數?如果它是可選的,它將需要一個默認值,並且由於我無法提供編譯時常量,似乎CodeInChaos的解決方案是最好的。 – Alex
@Downvoter爲什麼downvote?我覺得問題很清楚,有一個確切的答案,並與網站相關。 – Alex