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

时间:2010-04-19 11:52:23

标签: c# .net reflector

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

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

似乎yield和IEnumerator在IL中生成<>1__state;之类的东西,它们将无法编译。

有人知道如何从包含这种IL的反射器生成一个类吗?

是否有反射器插件可以解决这个问题?

    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;

2 个答案:

答案 0 :(得分:7)

IL来自迭代器块。迭代器是可怕的来手动编写,而迭代器块中的底层IL证明了编译器为您做的事实。 感激你不必亲自去做!

你可以尝试将这些主要来自MoveNext(),但不要指望奇迹。您可能还会发现重命名字段(以除去<>前缀之类的内容)还有很长的路要走。

然而;我期待要做的最好的事情就是了解代码正在尝试做什么,并停止尝试简单地窃取 借用< / em>他们的实施。

答案 1 :(得分:0)

您应该查看HTML Agility Pack