c# -为什么要使用DateTime ?MinValue和MaxValue不是编译时常量

本文关键字:MaxValue 编译 常量 MinValue 为什么 DateTime | 更新日期: 2023-09-27 18:03:42

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

根据MSDN页面,"这个常数的值相当于00:00:00. 0000000,0001年1月1日。"

为什么不是编译时常数呢?为什么它不同于传入Int32。MinValue,哪个是允许的?

c# -为什么要使用DateTime ?MinValue和MaxValue不是编译时常量

不能定义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)作为用户定义类型的有效默认参数值。