2010-04-19 52 views
2

我有一個dll,我在Reflector中反彙編,然後生成一個類。 該類包含不在Visual Studio中編譯的代碼。反射器和編譯器生成的代碼

我認爲它是leagl IL代碼,但是如何從中產生更高級別的c#。

似乎產量和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; 
+3

似乎從C#3.0開始,你不再需要混淆你的代碼:-) – 2010-04-19 11:54:24

+0

這可能是一個反射器錯誤。 – Svisstack 2010-04-19 11:54:54

+3

這不是一個錯誤。 – SLaks 2010-04-19 11:57:18

回答

7

該IL來自迭代器塊。迭代器是可怕的手動寫入,並且迭代器塊中的底層IL證明了編譯器爲您做了什麼。是感謝你不必自己動手!

你可以嘗試把這些放在一起主要是從MoveNext(),但不要期待奇蹟。你也可能會發現重命名這些字段(去掉諸如<>前綴之類的東西)會有很長的路要走。

但是;我預計要做的最好的事情是瞭解什麼代碼試圖做,並停止嘗試簡單竊取借用他們的實施。

+0

+1,我同意。如果代碼的作者希望其他人閱讀/修改它,他只會發佈源代碼。 – 2010-04-19 11:58:06

+0

@Marc Gravell:只是借鑑嘗試瞭解他們的實施。我不會從微軟竊取...... – mike 2010-04-19 12:08:56

+0

@ user291320 - 根據哪一段代碼,調試符號可能是免費的(根據許可證)。 – 2010-04-19 12:10:35