我有一个我在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;
答案 0 :(得分:7)
IL来自迭代器块。迭代器是可怕的来手动编写,而迭代器块中的底层IL证明了编译器为您做的事实。 感激你不必亲自去做!
你可以尝试将这些主要来自MoveNext()
,但不要指望奇迹。您可能还会发现重命名字段(以除去<>
前缀之类的内容)还有很长的路要走。
然而;我期待要做的最好的事情就是了解代码正在尝试做什么,并停止尝试简单地窃取 借用< / em>他们的实施。
答案 1 :(得分:0)
您应该查看HTML Agility Pack。