. net反射:一些字段的MissingFieldException



我正在制作一个。net兼容的编译器,今天我遇到了一个非常奇怪的bug。我正在测试字段getter,有时我得到MissingFieldException与一些内置类型的字段。

我所困扰的字段是:

  • 所有数字的MaxValue
  • 所有数值的MinValue
  • double.PositiveInfinity
  • double.NegativeInfinity
  • double.NaN

代码编译得很好:在编译过程中,找到FieldInfo并发出相应的ldsfld。然而,在运行阶段,会抛出上述异常。这种情况只发生在一些字段: Type.EmptyTypes编译和工作就像预期的那样!

我试图调查csc为这些字段发出的il代码,但它做了一些优化,程序只是将实际值推送到堆栈而不是调用字段。虽然这显然是一种更有效的方法,但现在我想让我的编译器尽可能简单。

有人遇到过类似的问题吗?

我试图调查csc为这些字段发出的il代码,但是它做了一些优化程序只是把实际的值返回栈,而不是调用该字段。

列表中的所有字段都是常量字段。因此,它们的值将被复制到由引用它们的代码生成的IL中。

相关内容

  • 没有找到相关文章

最新更新