Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#如何反编译生成返回枚举数_C#_Ienumerable_Decompiling_Yield Return - Fatal编程技术网

C#如何反编译生成返回枚举数

C#如何反编译生成返回枚举数,c#,ienumerable,decompiling,yield-return,C#,Ienumerable,Decompiling,Yield Return,我正在尝试反编译一些使用IEnumerators和yield return的C#代码,但是没有反编译器愿意将变量重命名为有效的C#名称。我尝试过ILSpy、JustDecompile、dotPeek和Reflector,但没有成功 到目前为止的反编译示例: private IEnumerator _WaitForSecondsThenStop(float startToFadeTime, float fadeOutLength) { AudioObject.<_WaitForSec

我正在尝试反编译一些使用IEnumerators和yield return的C#代码,但是没有反编译器愿意将变量重命名为有效的C#名称。我尝试过ILSpy、JustDecompile、dotPeek和Reflector,但没有成功

到目前为止的反编译示例:

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;
}
private IEnumerator\u waitforsecondhenstop(浮点开始到浮点结束时间,浮点结束时间)
{
AudioObject.c__迭代器0 c__迭代器=新的AudioObject.c__迭代器0();
c__迭代器.startToFadeTime=startToFadeTime;
c__迭代器。衰减长度=衰减长度;
c__迭代器.startToFadeTime=startToFadeTime;
c__迭代器。衰减长度=衰减长度;
c__迭代器.f__this=this;
返回c__迭代器;
}
ILSpy应该是正确地反编译枚举数的,但是它对我不起作用。在我读过的某个地方,它可能是由一些代码优化导致的,这些优化使得ILSpy无法识别模式,所以它可能是由这一点引起的


然而,我想问的是:是否有一个C#反编译器可以将所有字段、变量和类重命名为有效的C#名称?我对疯狂的状态自动机很满意,只要它能编译成正确的C代码。

我最后用以下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
模式替换它修复了什么
c_uu迭代器Iter_uu$1 c_u迭代器
_1美元2美元
_S_uu开始FadeTime
\$(\w+)\u SS\u$1$当前

编辑:经过一些检查,它仍然没有涵盖所有内容,我将在修复后更新该表。

我最终用以下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
模式替换它修复了什么
c_uu迭代器Iter_uu$1 c_u迭代器
_1美元2美元
_S_uu开始FadeTime
\$(\w+)\u SS\u$1$当前

编辑:经过一些检查后,它仍然没有涵盖所有内容,我会在修复后更新表格。

这种类型的问题对于SO来说是特别离题的。我希望有5k+站点代表的人知道这一点。哦,是的,我已经想到了一个解决方案,可以让它成为主题(至少有点),那就是用一些正则表达式“手动”替换它。你使用的是哪个版本的ILSpy?2.x版本在视图->选项->反编译枚举器中有一个选项,如果选中该选项,则应给出实际的yield语句。在3.x中,它是自动完成的,您不能关闭它。这种类型的问题专门针对SO。我希望有5k+站点代表的人知道这一点。哦,是的,我已经想到了一个解决方案,可以让它成为主题(至少有点),那就是用一些正则表达式“手动”替换它。你使用的是哪个版本的ILSpy?2.x版本在视图->选项->反编译枚举器中有一个选项,如果选中该选项,则应给出实际的yield语句。在3.x中,它是自动完成的,您无法关闭它。