2017-03-09 120 views
0

我想反编译一些C#代码使用IEnumerators与yield-return,但没有反编译器麻烦将变量重命名为有效的C#名称。我尝试过ILSpy,JustDecompile,dotPeek和Reflector,没有成功。C#如何反编译yield-return枚举

反编译到目前为止例如:

private IEnumerator _WaitForSecondsThenStop(float startToFadeTime, float fadeOutLength) 
{ 
    AudioObject.<_WaitForSecondsThenStop>c__Iterator0 <_WaitForSecondsThenStop>c__Iterator = new AudioObject.<_WaitForSecondsThenStop>c__Iterator0(); 
    <_WaitForSecondsThenStop>c__Iterator.startToFadeTime = startToFadeTime; 
    <_WaitForSecondsThenStop>c__Iterator.fadeOutLength = fadeOutLength; 
    <_WaitForSecondsThenStop>c__Iterator.<$>startToFadeTime = startToFadeTime; 
    <_WaitForSecondsThenStop>c__Iterator.<$>fadeOutLength = fadeOutLength; 
    <_WaitForSecondsThenStop>c__Iterator.<>f__this = this; 
    return <_WaitForSecondsThenStop>c__Iterator; 
} 

ILSpy是假想able to编译枚举正确,但它不为我工作。我读过的地方可能是由于代码的一些优化导致ILSpy无法识别这些模式,所以它可能是由此引起的。

但是,我想问的是:是否有一个C#反编译器,将所有的字段,变量和类重命名为有效的C#名称?我对状态自动机疯狂很好,只要它编译为一个合适的C#代码即可。

+3

这种类型的问题是专门针对SO的话题。我希望有5k +网站代表的人知道这一点。 – itsme86

+0

哦,是的,我已经在考虑1个解决方案,它会在主题上(至少是某种程度上),而这只是用一些正则表达式“手动”替换它。 – kajacx

回答

0

我结束了这4个正则表达式更改名称:

Pattern    Replacement  What it fixes 
<(\w+)>c__Iterator Iter_$1   <_WaitForSecondsThenStop>c__Iterator 
<(\w+)>_    _L_$1_   <form>__2 
<\$?>     _S_    <$>startToFadeTime 
\$(\w+)    _SS_$1   $current 

编辑:一些检查后,它仍然不十分面面俱到,一旦我解决这个问题,我会更新表。