1

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

我困扰的领域是:

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

代码编译良好:在编译期间,FieldInfo找到并发出相应ldsfld的。然而,在运行阶段,上述异常被抛出。这只发生在某些领域Type.EmptyTypes按预期编译和工作!

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

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

4

1 回答 1

0

我试图研究csc为这些字段发出的 IL 代码,但它做了一些优化,程序只是将实际值推送到堆栈而不是调用字段。

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

于 2013-03-03T20:37:13.417 回答