.NET反射:MissingFieldException包含一些字段

时间:2013-03-03 20:28:04

标签: c# .net reflection

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

我所困扰的领域是:

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

代码编译正常:在编译期间,找到FieldInfo并发出相应的ldsfld。然而,在运行阶段,抛出上述异常。这种情况发生仅适用于某些字段Type.EmptyTypes编译并按预期工作!

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

有没有人遇到类似的问题?

1 个答案:

答案 0 :(得分:0)

  

我尝试调查csc为这些字段发出的IL代码,   但它做了一些优化,程序只是推动实际   值而不是调用字段。

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