我想为方法设置一个可选的日期参数(默认为MinValue),以便检查用户是否实际提供了一个值(提供MinValue无效),但是我不允许这样做,因为它显然是不是编译时常量。
根据the MSDN page,“此常数的值相当于000 1月1日00:00:00.0000000”。
那为什么不是编译时常量?为什么它与传入允许的Int32.MinValue不同?
答案 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)
作为用户定义类型的有效默认参数值。
或者只是为不同数量的参数重载方法。