有没有办法将反射镜拆卸回新的C#构造?

自动实施属性是这样的:

[CompilerGenerated]
private string <TypeName>k__BackingField;
 public string TypeName
 {
     [CompilerGenerated]
     get
      {
         return this.<TypeName>k__BackingField;
      }
      [CompilerGenerated]
      private set
      {
          this.<TypeName>k__BackingField = value;
      }
 }

带有字符串INT或对象的通用类型出现了错误:

Tuple<User,String><User,string>

更不用说根据一些基于lambda的代码生成的令人困惑的枚举者。

有任何想法吗?回到原始形式将是很棒的,但是到达同等的汇编状态将是向前迈出的一大步。以上示例不是有效的C#代码。

有帮助吗?

解决方案

关于自动实施的属性,它们出现了(即 get; set; 在最新版本中没有编译器生成的后场)。只需确保您设置 Optimization.NET 3.5 或者 .NET 4.0View -> Options -> Disassembler.

其他提示

并非一切都是双向翻译。 lambda表达式,迭代器和自动插入属性之类的东西是C#中的句法糖,可以为我们编译为真实的代码。并不总是使用此编译的代码并确定原始代码的外观。

如果反射器对代码做出了假设,以检测这些句法抽象的结果,然后Microsoft更改了编译器,则它将再次被打破。相反,反射器似乎选择基于CLR和语言规格的基础,而语言规格则不再发生更改,而无需事先通知。

好吧,显然,反射器还没有该功能。它甚至还没有赶上C#3.0,更不用说C#4.0了。只需等待下一个版本(如果有一个版本)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top