为什么DateTime.MinValue和DateTime.MaxValue不是常量?

9 浏览
0 Comments

为什么DateTime.MinValue和DateTime.MaxValue不是常量?

为什么DateTime.MinValueDateTime.MaxValue不像int.MinValueint.MaxValue那样是常量?为什么C#会这样做?\n我试图查看struct DateTime,但找不到任何初始化这些字段的构造函数。

0
0 Comments

为什么DateTime.MinValue和DateTime.MaxValue不是const?

在.NET中,只有原始类型和字符串可以被定义为常量。然而,在DateTime结构中并没有找到初始化这些字段的构造函数。事实上,它们是在源代码中直接进行了初始化。在实践中,静态字段的初始化将在静态构造函数中生成。

有趣的是,在C#中可以定义decimal常量,尽管decimal并不是原始类型。在后台,这些“常量”也将编译为带有特殊DecimalConstant属性的静态字段。可以考虑修改第一句话,提到decimal,因为后面的部分与之相矛盾。值得注意的是,如果C#以后想要支持DateTime常量,还可以使用DateTimeConstantAttribute。

DateTime.MinValue和DateTime.MaxValue不能被定义为const的主要原因是,它们无法满足.NET只允许原始类型和字符串作为常量的规定。解决方法是在静态构造函数中进行初始化,而不是使用const来定义常量。

0