根据这个答案时,代码使用本地变量从内部拉姆达方法,编译器将生成可以有名称,如额外的课程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
“手段”
Ç - >匿名方法闭合类(“DisplayClass”)
好了,但什么是“DisplayClass”这里的意思?
这是什么生成的类“摆设”? 换句话说它为什么不是“MagicClass”或“GeneratedClass”或任何其他的名字?