C# 反射器和编译器生成的代码

C# 反射器和编译器生成的代码,c#,.net,reflector,C#,.net,Reflector,我在Reflector中反汇编了一个dll,然后生成了一个类。 该类包含不在Visual Studio中编译的代码 我认为这是leagl IL代码,但如何从中生成更高级别的c 似乎收益率和IEnumerator生成了1\u状态 有人知道我如何从包含这种IL的reflector生成一个类吗 有一个反射器插件可以解决这个问题吗 private sealed class <Rule_Document>d__0 : IEnumerable<HtmlTag>, IEnume

我在Reflector中反汇编了一个dll,然后生成了一个类。 该类包含不在Visual Studio中编译的代码

我认为这是leagl IL代码,但如何从中生成更高级别的c

似乎收益率和IEnumerator生成了
1\u状态

有人知道我如何从包含这种IL的reflector生成一个类吗

有一个反射器插件可以解决这个问题吗

    private sealed class <Rule_Document>d__0 : IEnumerable<HtmlTag>, IEnumerable, IEnumerator<HtmlTag>, IEnumerator, IDisposable
    {
        private int <>1__state;
        private HtmlTag <>2__current;
        public HtmlParser <>4__this;
        private int <>l__initialThreadId;
        public HtmlTag <htmlTag>5__1;
私有密封类d_u0:IEnumerable,IEnumerable,IEnumerator,IEnumerator,IDisposable
{
私立国际1____州;
私有HtmlTag 2_uuu电流;
公共HTMLPasser 4____;
private int l__initialThreadId;
公共HtmlTag 5___1;

说明IL来自迭代器块。迭代器手工编写非常糟糕,迭代器块的底层IL证明了编译器为您所做的事情的真实性。感谢您不必自己动手

您可以尝试主要通过
MoveNext()
将其组合在一起,但不要期望奇迹出现。您还可能会发现重命名字段(以消除
前缀之类的内容)有很大的帮助


然而,我认为最好的办法是理解代码试图做什么,不要再试图简单地窃取它们的实现。

你应该看看。

似乎从C#3.0开始,你不再需要混淆你的代码:-)@Darin-它来自迭代器块,所以2.0-但是是的;迭代器几乎是预o的bFouscated.@Marc我一直认为这些编译器生成的类的名称与您在查看它们的代码时所做的相似:d_u0+1,我同意。如果代码的作者希望其他人阅读/修改它,他只会发布源代码。@Marc Gravel:只是借用一下来理解它们的实现。我不会从Mi那里偷东西crosoft…@user291320-根据哪段代码,调试符号可能是免费的(在许可证下)。Gra砾-我试图理解webtestframework.dll中的HTMLPasser类。我想编写自己的简单HTMLPasser。我从哪里获得调试符号以及如何使用它们?你能给我指一个链接吗?谢谢