问题描述
以下包含 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));
}
}
由https://sharplab.io/#v2:CYLg1APgAgTAjAWAFDKgZgASwwWQKYDCANgIYDOZGyA3shvVplACy4kCWAdgBQCUVSBhlqChDKAFYAPFwAuAPgwAzAK6cAxhgC8GPtsVwYAbjoMAvkORmgA=生成。
我知道我的委托实例 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
可以以某种方式重用,但我无法重现。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)