C#编译器:Lambda中的类

问题描述

使用以下c#代码

static void Main(string[] args)
    {
        int val = int.Parse(Console.ReadLine());
        Do (() =>
        {
            if (val == 0)
                return 1;
            return 42;
        });
    }

    public static int Do(Func<int> query)
    {
        return query();
    }

生成下面的IL

.method private hidebysig static void
    Main(
      string[] args
    ) cil managed
  {
    .entrypoint
    .maxstack 8

    IL_0000: newobj       instance void ConsoleApp1.Program/'<>c__DisplayClass0_0'::.ctor()

    // [30 13 - 30 53]
    IL_0005: dup
    IL_0006: call         string [System.Console]System.Console::ReadLine()
    IL_000b: call         int32 [System.Runtime]System.Int32::Parse(string)
    IL_0010: stfld        int32 ConsoleApp1.Program/'<>c__DisplayClass0_0'::val

    // [31 13 - 36 16]
    IL_0015: ldftn        instance int32 ConsoleApp1.Program/'<>c__DisplayClass0_0'::'<Main>b__0'()
    IL_001b: newobj       instance void class [System.Runtime]System.Func`1<int32>::.ctor(object,native int)
    IL_0020: call         int32 ConsoleApp1.Program::Do(class [System.Runtime]System.Func`1<int32>)
    IL_0025: pop

    // [39 9 - 39 10]
    IL_0026: ret

  } // end of method Program::Main

IL_0000分配的目的是什么?

the Fun<int32>DisplayClass之间的链接是如何建立的? (我猜它是IL_0015和IL_001b行吗?)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...