2

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

我认为它是 leagl IL 代码,但我怎样才能从中生成更高级别的 c#。

似乎 yield 和 IEnumerator<>1__state;在 IL 中生成了无法编译的东西。

有人知道我如何从包含这种 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;
4

2 回答 2

7

该 IL 来自迭代器块。迭代器很难手动编写,迭代器块的底层 IL 证明了编译器为您所做的现实。感谢您不必自己做!

您可以尝试主要从 中将它们组合在一起MoveNext(),但不要指望奇迹。您可能还会发现重命名字段(以摆脱<>前缀之类的东西)还有很长的路要走。

然而; 我希望最好的办法是了解代码试图做什么,并停止试图简单地窃取 它们的实现。

于 2010-04-19T11:56:16.723 回答
0

您应该查看HTML Agility Pack

于 2010-04-19T12:52:53.493 回答