我需要修复使用 .NET 4 反编译的 C# 代码。不幸的是,在我的工作站上只安装了 .NET 3.5,这可能是以下代码无法编译的原因:
ReportPage.<>c__DisplayClass26 <>c__DisplayClass = new ReportPage.<>c__DisplayClass26();
这里的 <> construct 是什么意思? 除此行外,代码中的任何地方都没有 c__DisplayClass26 字符串。这可能意味着此名称是根据反编译期间遗漏的一些元信息构建的。
最佳答案
C# 编译器有时必须引入变量/字段/类。当他必须这样做时,他会在前面加上 <>
到他们的名字,所以不会有名称冲突(对于 C# 编译器,用这两个字符命名是非法的)。例如,对于自动生成的属性,yield
会发生这种情况。关键字、lambda 和匿名函数/委托(delegate),新的 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
重建“原始”代码代码。
关于c# - C# 类名前的空 <>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7357525/