C# C:意外字符“$”

C# C:意外字符“$”,c#,C#,我使用ILSpy反编译了一个C程序集。在VC中将其作为项目打开。 代码的一小部分抛出了我不知道如何修复的错误。代码如下: 下面是错误:在本例中,第8行出现意外字符“$”。 如果我打开出现错误的.cs文件,编译器会开始抛出十几个错误,就像在CoroutineUtils之后的第6行预期的标识符一样。 不知道该怎么办。你不能只是复制/粘贴反编译的代码,并确保它能正常工作。编译器可以使用在C代码中无效但在IL中有效的标识符。这种情况主要发生在编译器生成的代码中——自动属性、匿名类型、迭代器和转换为状态

我使用ILSpy反编译了一个C程序集。在VC中将其作为项目打开。 代码的一小部分抛出了我不知道如何修复的错误。代码如下:

下面是错误:在本例中,第8行出现意外字符“$”。 如果我打开出现错误的.cs文件,编译器会开始抛出十几个错误,就像在CoroutineUtils之后的第6行预期的标识符一样。
不知道该怎么办。

你不能只是复制/粘贴反编译的代码,并确保它能正常工作。编译器可以使用在C代码中无效但在IL中有效的标识符。这种情况主要发生在编译器生成的代码中——自动属性、匿名类型、迭代器和转换为状态机的异步/等待等


很难说代码应该做什么,所以很难说如何修复它

问题中的代码看起来像是一个yield-return迭代器。谢谢。这是否意味着ILSpy无法完全反编译代码,但其他软件可能会成功?还是这样?我不知道。您可以试试。@Bester我不知道有哪种CIL反编译器能够正确地将yield-return函数的字节码表示形式转换回其源形式。我不建议你让一个工具来完成你的工作:如果你在C语言方面有足够的能力,你应该能够自己将字节码转换回C语言。
public static class CoroutineUtils
{
    [DebuggerHidden]
    public static IEnumerator WaitForRealSeconds(float time)
    {
        CoroutineUtils.<WaitForRealSeconds>c__Iterator2F <WaitForRealSeconds>c__Iterator2F = new CoroutineUtils.<WaitForRealSeconds>c__Iterator2F();
        <WaitForRealSeconds>c__Iterator2F.time = time;
        <WaitForRealSeconds>c__Iterator2F.<$>time = time;
        return <WaitForRealSeconds>c__Iterator2F;
    }
}