我想为方法提供一个可选的日期参数(默认为MinValue),以便检查用户是否实际提供了一个值(提供MinValue无效),但我不允许,因为显然它不是编译时常数。
根据MSDN页面,"这个常数的值相当于00:00:00. 0000000,0001年1月1日。"
为什么不是编译时常数呢?为什么它不同于传入Int32。MinValue,哪个是允许的?
不能定义DateTime常量(或结构)。MSDN允许的const类型有:
类型之一:byte、char、short、int、long、float、double、decimal、bool、string、enum类型或引用类型。
解决方法:使用空值作为参数。在我看来,这是更清晰的,因为特殊值明显不同,而不仅仅是一个正常的值。
void A(DateTime? p=null)
{
}
另一个选项是:
void A(DateTime p=default(DateTime))
{
}
表示默认参数可以使用default(T)
作为用户定义类型的有效默认参数值。