根据这个答案,当代码使用 lambda 方法内部的局部变量时,编译器将生成额外的类,这些类的名称可以是c__DisplayClass1
. 例如下面的(完全没用的)代码:
class Program
{
static void Main()
{
try {
implMain();
} catch (Exception e) {
Console.WriteLine(e.ToString());
}
}
static void implMain()
{
for (int i = 0; i < 10; i++) {
invoke(() => {
Console.WriteLine(i);
throw new InvalidOperationException();
});
}
}
static void invoke(Action what)
{
what();
}
}
输出以下调用堆栈:
System.InvalidOperationException
at ConsoleApplication1.Program.<>c__DisplayClass2.<implMain>b__0()
at ConsoleApplication1.Program.invoke(Action what)
at ConsoleApplication1.Program.implMain()
at ConsoleApplication1.Program.Main()
请注意,c__DisplayClass2
其中有一个由编译器生成的用于保存循环变量的类的名称。
根据这个答案 c__DisplayClass
“手段”
c --> 匿名方法闭包类(“DisplayClass”)
好的,但是“DisplayClass”在这里是什么意思?
这个生成的类“显示”了什么?换句话说,为什么它不是“MagicClass”或“GeneratedClass”或任何其他名称?