c# 反编译,编译器自动生成的一个方法,不太明白语法结构

ahking 2020-03-29 10:14:01

private static int <Main>b_0(int x,int )
{
return (x+y);
}


int 后面的空格 <Main>是什么意思?
...全文
150 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
github_36000833 2020-04-02
  • 打赏
  • 举报
回复
引用 3 楼 ahking 的回复:
那么说<Main>b_0整个是方法名称了?
是。
ahking 2020-04-01
  • 打赏
  • 举报
回复
引用 1 楼 github_36000833 的回复:
就是函数的名字。 编译器帮我们把匿名函数编译成一个普通il函数,并给它一个名字,名字本身并不重要,无需遵循C#的语法规则。 比如:
class Program
{
    static void Main(string[] args)
    {
        var arrA = new int[] { 1, 2, 3 };
        var arrB = new int[] { 4, 5, 6 };

        // 这里的(x,y) => x + y,就可能被编译为类似Main_b_0。
        var arrC1 = arrA.Zip(arrB, (x, y) => x + y);  // [5, 7, 9]

        // 直接写一个命名函数也一样
        var arrC2 = arrA.Zip(arrB, Main_b_0); // [5, 7, 9]
    }

    static int Main_b_0(int x, int y)
    {
        return x + y;
    }
}
那么说<Main>b_0整个是方法名称了?
threenewbee 2020-03-29
  • 打赏
  • 举报
回复
表示main里面的一个匿名lambda表达式或者委托。
话说你的反编译器是不是版本太老
github_36000833 2020-03-29
  • 打赏
  • 举报
回复
就是函数的名字。 编译器帮我们把匿名函数编译成一个普通il函数,并给它一个名字,名字本身并不重要,无需遵循C#的语法规则。 比如:
class Program
{
    static void Main(string[] args)
    {
        var arrA = new int[] { 1, 2, 3 };
        var arrB = new int[] { 4, 5, 6 };

        // 这里的(x,y) => x + y,就可能被编译为类似Main_b_0。
        var arrC1 = arrA.Zip(arrB, (x, y) => x + y);  // [5, 7, 9]

        // 直接写一个命名函数也一样
        var arrC2 = arrA.Zip(arrB, Main_b_0); // [5, 7, 9]
    }

    static int Main_b_0(int x, int y)
    {
        return x + y;
    }
}

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧