c# - C# 类名前的空 <>

标签 c# decompiling

我需要修复使用 .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/

相关文章:

java - 如何反编译 .jar 文件?

java - 阻碍android应用程序的反编译?

security - 从可疑二进制文件中提取 SSL 信息

c# - Checked 和 Unchecked 不是只在运行时建立溢出上下文吗?

c# - 获取蜂窝图案上的单元格坐标

C#:简单的 Windows 服务提供安全异常

c# - 使用 tweetsharp 避免 Twitter 的登录提示

c# - 检查对象是否可以转换为特定值类型?

java - 适用于 Windows 7 的任何开源 Java 反编译器

java - class文件到java文件的转换