Lambda-Expression 编译器代码生成

问题描述

以下包含 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 (将#修改为@)