我一直在寻找并尝试使用 dotPeek 的导出到项目功能从 mscorlib 库 (4.0) 的源代码中学习,当我尝试构建它时,它失败了,因为 Double 的 MinValue 和 MaxValue 是“错误的编译时间”常数'.
[__DynamicallyInvokable]
public const double MinValue = -1.79769313486232E+308; // Bad compile time constant
[__DynamicallyInvokable]
public const double MaxValue = 1.79769313486232E+308; // Bad compile time constant
我到底错过了什么? 导出编译器生成的代码是否可以解决此问题,或者是否有某种幕后操作可以解决此问题?
注意:使用 Visual Studio 2013 Ultimate 进行构建,我还有 2012 和 2010 版本的 Visual Studio(喜欢大学),不确定我使用的编译器是否会改变这个问题。
问题在于为您生成常量的应用程序生成了错误的数字。正确的数字是:
public const double MinValue = -1.7976931348623157E+308;
和
public const double MaxValue = 1.7976931348623157E+308;
生成的代码将最后 4 位数字从 3157 舍入为 32(00),这超出了双精度值。