28

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

根据MSDN 页面,“该常量的值相当于 0001 年 1 月 1 日的 00:00:00.0000000。”

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

4

2 回答 2

23

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

其中一种类型:byte、char、short、int、long、float、double、decimal、bool、string、枚举类型或引用类型。

于 2011-07-28T09:38:00.583 回答
18

解决方法:使用可为空的作为参数。IMO 无论如何这更干净,因为特殊值明显不同,而不仅仅是正常值。

void A(DateTime? p=null)
{
}

另一种选择是:

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

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

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

于 2011-07-28T09:46:19.497 回答