C# - 为什么DateTime.MinValue和MaxValue不是编译时常量?

时间:2011-07-28 09:37:03

标签: c# datetime compile-time-constant

我想为方法设置一个可选的日期参数(默认为MinValue),以便检查用户是否实际提供了一个值(提供MinValue无效),但是我不允许这样做,因为它显然是不是编译时常量。

根据the MSDN page,“此常数的值相当于000 1月1日00:00:00.0000000”。

那为什么不是编译时常量?为什么它与传入允许的Int32.MinValue不同?

2 个答案:

答案 0 :(得分:23)

您无法定义DateTime常量(或结构)。从MSDN允许的const类型是:

  

其中一种类型:byte,char,short,int,long,float,double,decimal,bool,string,enum type或reference type。

答案 1 :(得分:13)

解决方法:使用nullable作为参数。 IMO这个更干净,因为特殊值明显不同而不仅仅是正常值。

void A(DateTime? p=null)
{
}

另一种选择是:

void A(DateTime p=default(DateTime))
{
}

这表明默认参数可以使用default(T)作为用户定义类型的有效默认参数值。

或者只是为不同数量的参数重载方法。