这个带有尖括号的表示法是什么意思?

6

我正在阅读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。我怀疑这些符号只能由编译器使用,当我自己尝试时,它们都无效。但我很难搜索更多关于此符号意图的信息。


2
有人曾在SO上发布过一篇文章,展示了许多C#编译器所生成的内容(当时的情况可能已经改变)- 所有你看到的随机小字符(例如4__this中的4)都有隐含的意义。编辑:这是它的链接:https://dev59.com/pXE85IYBdhLWcg3w_I78 - Tim S.
2个回答

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

生成名称的代码在这里(从这个答案中借鉴而来)。 - mins

0
当您使用Lambda表达式时,Lambda表达式是一个匿名方法。但编译器需要给它一个名称,因此这些方法是由编译器生成的,对人类来说不可读。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接