以下包含 lambda 表达式的 C# 代码
public class MeClass
{
public void Main()
{
Func<int> func = () => 12;
}
}
被编译器降低为
public class MeClass
{
[Serializable]
[CompilerGenerated]
private sealed class <>c
{
public static readonly <>c <>9 = new <>c();
public static Func<int> <>9__0_0;
internal int <Main>b__0_0()
{
return 12;
}
}
public void Main()
{
Func<int> func = <>c.<>9__0_0 ?? (<>c.<>9__0_0 = new Func<int>(<>c.<>9.<Main>b__0_0));
}
}
我知道我的委托实例 Func<int> func
将使用 Func<int> <>9__0_0
中的字段 <>c
的值进行初始化。
此字段将在 Func<int> func
初始化时初始化。
我的问题是,为什么 <>c
首先具有相同委托类型的字段。
为什么 Func<int> func
的值不直接设置为 new Func<int>(<>c.<>9.<Main>b__0_0)
?
我猜,Func<int> <>9__0_0
可以以某种方式重用,但我无法重现。