有没有办法让反射器反汇编回新的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;
}
}
使用字符串整数或对象的通用类型出错:
Tuple<User,String><User,string>
更不用说为响应某些基于lambda的代码而生成的令人困惑的枚举器。
任何想法?回到原始形式会很棒,但是进入相同的可编辑状态将是向前迈出的一大步。以上示例不是有效的C#代码。
答案 0 :(得分:5)
关于自动实现的属性,它们在最新版本中很好(即get; set;
没有编译器生成的后备字段)。只需确保在Optimization
中将.NET 3.5
设置为.NET 4.0
或View -> Options -> Disassembler
。
答案 1 :(得分:4)
并非所有内容都是双向翻译。像lambda表达式,迭代器和自动实现的属性这样的东西是C#中的语法糖,它们被编译成我们的真实代码。并不总是可能采用这个编译的代码并确定原始代码的样子。
如果Reflector对代码进行了假设,以便检测这些语法抽象的结果,然后Microsoft更改了编译器,那么它将再次被破坏。反射器似乎选择将其反编译基于CLR和语言规范,这些规范不受更改,恕不另行通知。
答案 2 :(得分:-3)
嗯,显然,Reflector还没有这个功能。它甚至还没有赶上C#3.0,更不用说C#4.0了。只需等待下一个版本(如果有的话)。