如何使反射器不扼杀新语法
-
30-09-2019 - |
题
有没有办法将反射镜拆卸回新的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.0
在 View -> Options -> Disassembler
.
其他提示
并非一切都是双向翻译。 lambda表达式,迭代器和自动插入属性之类的东西是C#中的句法糖,可以为我们编译为真实的代码。并不总是使用此编译的代码并确定原始代码的外观。
如果反射器对代码做出了假设,以检测这些句法抽象的结果,然后Microsoft更改了编译器,则它将再次被打破。相反,反射器似乎选择基于CLR和语言规格的基础,而语言规格则不再发生更改,而无需事先通知。
好吧,显然,反射器还没有该功能。它甚至还没有赶上C#3.0,更不用说C#4.0了。只需等待下一个版本(如果有一个版本)。
不隶属于 StackOverflow