5

我正在阅读C# 5.0 中的 Async ,编译器转换部分包含以下代码段:

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。当我自己尝试它们时,它们都不起作用,所以我怀疑它仅供编译器使用。但是我在搜索有关此符号的含义的更多信息时遇到了麻烦。

4

2 回答 2

7

与标记泛型的括号(例如Task<int>)不同,它们没有特殊含义。它们正是编译器生成的——在 IL 中有效但在 C# 中无效的标识符。

于 2013-06-15T18:21:41.473 回答
0

使用 lambda 表达式时,lambda 表达式是一种匿名方法。但是编译器需要给它一个名字,所以这些方法是编译器生成的,人类不可读。

于 2013-06-15T23:06:08.650 回答