我想要一个方法的可选日期参数(默认为 MinValue),以检查用户是否实际提供了一个值(提供 MinValue 无效),但我不允许,因为它显然不是编译-时间常数。
根据MSDN 页面,“该常量的值相当于 0001 年 1 月 1 日的 00:00:00.0000000。”
那么为什么这不是编译时常量呢?为什么它与传入允许的 Int32.MinValue 不同?
我想要一个方法的可选日期参数(默认为 MinValue),以检查用户是否实际提供了一个值(提供 MinValue 无效),但我不允许,因为它显然不是编译-时间常数。
根据MSDN 页面,“该常量的值相当于 0001 年 1 月 1 日的 00:00:00.0000000。”
那么为什么这不是编译时常量呢?为什么它与传入允许的 Int32.MinValue 不同?
您不能定义 DateTime 常量(或结构)。从 MSDN 允许的 const 类型是:
其中一种类型:byte、char、short、int、long、float、double、decimal、bool、string、枚举类型或引用类型。
解决方法:使用可为空的作为参数。IMO 无论如何这更干净,因为特殊值明显不同,而不仅仅是正常值。
void A(DateTime? p=null)
{
}
另一种选择是:
void A(DateTime p=default(DateTime))
{
}
这表明默认参数可以default(T)
用作用户定义类型的有效默认参数值。
或者只是为不同数量的参数重载方法。