我有一个无法在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;符号。
您认为可能会导致这些错误?
答案 0 :(得分:3)
根据您使用 iterator block 的内容,这是C#2.0中引入的一种语言。
迭代器块是syntactic sugar。当编译器遇到迭代器块时,它将应用语法映射,它会扩展迭代器块,使其在内部变得更复杂。当您在反汇编程序中打开程序集时,您所看到的是语法映射的产物。
编译器不希望您能够引用此编译器生成的代码(因为它会令人困惑并且可能存在危险/冲突),因此它会为生成的标识符提供无法写入的名称,否则这些名称在C#中将无效。
总之,&lt;,&gt;和$符号 在C#中无效,但在IL中无效(反汇编程序最好尝试从中准确地重建源代码)。