我正在阅读Async in C# 5.0,编译器转换部分包含此代码段:
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.<>4__this
。当我自己尝试时它们都不起作用,所以我怀疑它只供编译器使用。但是我在寻找有关这种符号意图的更多信息时遇到了麻烦。
答案 0 :(得分:6)
与括号标记泛型(例如Task<int>
)不同,它们没有特殊含义。它们只是编译器生成的内容 - 在IL中有效但在C#中无效的标识符。
答案 1 :(得分:0)
使用lambda表达式时,lambda表达式是一种匿名方法。但编译器需要给它一个名字,所以这些方法是由编译器生成的,它对人类来说是不可读的。