C#类名称前为空<>

Bas*_*evs 1 c# decompiling

我需要修复在.NET 4上反编译的C#代码。不幸的是,在我的工作站上仅安装了.NET 3.5,这可能是以下代码无法编译的原因:

ReportPage.<>c__DisplayClass26 <>c__DisplayClass = new ReportPage.<>c__DisplayClass26();
Run Code Online (Sandbox Code Playgroud)

<>构造在这里意味着什么?除此行外,代码中任何地方都没有c__DisplayClass26字符串。这可能意味着该名称是根据反编译过程中丢失的一些元信息构造的。

xan*_*tos 5

C#编译器有时必须引入变量/字段/类。当他必须这样做时,他<>会在名称前加上它们,这样就不会发生名称冲突(对于C#编译器,使用这两个字符来命名是非法的)。例如自动生成的属性,yield关键字,lambda和匿名函数/代理,新async关键字(在Async CTP中引入并且可能在C#5.0中出现的关键字)就会发生这种情况...

现在...很奇怪,您c__DisplayClass26只有那里。也许您的反编译器没有达到标准。尝试使用查看代码IlSpy

看一下这个pastebin:http//pastebin.com/pTRVyVdp(不是我的)。有一个示例c__DisplayClass。文本的前半部分是“原始”代码,后半部分是反编译代码。您会看到,在这种情况下,它用于关闭。在第32/33行有一个[CompilerGenerated] private sealed class <>c__DisplayClass2。您也应该在代码中包含它。

嗯... IlSpy太好了:-)通常,它能够从CompilerGenerated代码中重构“原始” 代码。