由于<,>而无法编译代码和$符号

时间:2014-08-09 08:52:24

标签: c# visual-studio compiler-errors compiler-generated

我有一个无法在visual studio中构建的程序集的C#代码。经过一些研究后,我发现所有这些错误都是由<,>引起的。和$符号。在.NET反射器中分析程序集会发现代码的这些部分是由编译器创建的。这是一些带有这些错误的代码

    private System.Collections.IEnumerator Register(string name, string password, string password2, string email)
{
    LoginFengKAI.<Register>c__Iterator2 <Register>c__Iterator = new LoginFengKAI.<Register>c__Iterator2();
    <Register>c__Iterator.name = name;
    <Register>c__Iterator.password = password;
    <Register>c__Iterator.password2 = password2;
    <Register>c__Iterator.email = email;
    <Register>c__Iterator.<$>name = name;
    <Register>c__Iterator.<$>password = password;
    <Register>c__Iterator.<$>password2 = password2;
    <Register>c__Iterator.<$>email = email;
    <Register>c__Iterator.<>f__this = this;
    return <Register>c__Iterator;
}

这里我使用&lt; <Register>得到两个错误。和&gt;每个<$>的符号和三个错误,用于使用&lt ;, $和&gt;符号。 您认为可能会导致这些错误?

1 个答案:

答案 0 :(得分:3)

根据您使用 iterator block 的内容,这是C#2.0中引入的一种语言。

迭代器块是syntactic sugar。当编译器遇到迭代器块时,它将应用语法映射,它会扩展迭代器块,使其在内部变得更复杂。当您在反汇编程序中打开程序集时,您所看到的是语法映射的产物。

编译器不希望您能够引用此编译器生成的代码(因为它会令人困惑并且可能存在危险/冲突),因此它会为生成的标识符提供无法写入的名称,否则这些名称在C#中将无效。

总之,&lt;,&gt;和$符号 在C#中无效,但在IL中无效(反汇编程序最好尝试从中准确地重建源代码)。