C# 这个包含尖括号的符号是什么意思?
我正在阅读,关于编译器转换的部分包含以下代码段:C# 这个包含尖括号的符号是什么意思?,c#,.net,syntax,async-await,notation,C#,.net,Syntax,Async Await,Notation,我正在阅读,关于编译器转换的部分包含以下代码段: public Task<int> AlexsMethod() { <AlexsMethod>d__0 stateMachine = new <AlexsMethod>d__0(); stateMachine.<>4__this = this; stateMachine.<>t__builder = AsyncTaskMethodBuilder<int>
public Task<int> AlexsMethod()
{
<AlexsMethod>d__0 stateMachine = new <AlexsMethod>d__0();
stateMachine.<>4__this = this;
stateMachine.<>t__builder = AsyncTaskMethodBuilder<int>.Create();
stateMachine.<>1__state = -1;
stateMachine.<>t__builder.Start<<AlexsMethod>d__0>(ref stateMachine);
return stateMachine.<>t__builder.Task;
}
公共任务AlexsMethod()
{
d__0 stateMachine=新的d__0();
stateMachine.4_uuthis=this;
stateMachine.t__builder=AsyncTaskMethodBuilder.Create();
stateMachine.1_uu状态=-1;
stateMachine.t__builder.Start(参考stateMachine);
返回stateMachine.t\u builder.Task;
}
有两种符号对我来说是新的。第一个是
d\u 0
。第二个是状态机。当我自己尝试它们时,两者都不起作用,所以我怀疑它只供编译器使用。但是我很难找到关于这个符号的更多信息。与标记泛型的括号(例如,任务
)不同,它们没有特殊意义。它们正是编译器生成的-标识符在IL中有效,但在C#中无效。当使用lambda表达式时,lambda表达式是一种匿名方法。但是编译器需要给它起一个名字,所以这些方法是由编译器生成的,人类是不可读的。有人在上面发了一篇帖子,展示了C编译器(当时-可能会发生变化)所做的很多事情——你看到的所有随机小字符(例如4
中的4
)都有隐含的含义。编辑:在这里:生成名称的代码是(借用自)