我正在制作一个与.NET兼容的编译器,今天我遇到了一个非常奇怪的错误。我正在测试字段的getter,有时我会得到MissingFieldException
一些内置类型的字段。
我所困扰的领域是:
MaxValue
MinValue
double.PositiveInfinity
double.NegativeInfinity
double.NaN
代码编译正常:在编译期间,找到FieldInfo
并发出相应的ldsfld
。然而,在运行阶段,抛出上述异常。这种情况发生仅适用于某些字段:Type.EmptyTypes
编译并按预期工作!
我试图研究csc
为这些字段发出的IL代码,但它做了一些优化,程序只是将实际值推送到堆栈而不是调用字段。虽然这显然是一种更有效的方法,但现在我想让编译器尽可能简单。
有没有人遇到类似的问题?
答案 0 :(得分:0)
我尝试调查
csc
为这些字段发出的IL代码, 但它做了一些优化,程序只是推动实际 值而不是调用字段。
列表中的所有字段都是 常量 字段。因此,它们的值将被复制到从引用它们的代码生成的IL中。