为什么我不能将DateTime.MinValue和int.MinValue用作C#4.0中的可选值?

Bri*_*ott 1 optional-parameters c#-4.0

有人可以解释使用C#4.0编写的以下方法签名有什么问题吗?

public void Test(string arg1 = string.Empty, DateTime arg2 = DateTime.MinValue){}
Run Code Online (Sandbox Code Playgroud)

我理解""和string.Empty在编译时检查方面的区别,但是如果你不能声明一个合理的值类型null样式比较,那么在C#4.0中实现可选参数的方式肯定是不合适的.

Tim*_*son 6

因为DateTime.MinValue并且DateTime.MaxValue不是编译时间常量 - 它们是readonly在运行时由DateTime静态构造函数初始化的字段.

查看const字段(编译时常量)和readonly字段(不是)之间的区别:const和readonly之间有什么区别?