C#中语句lambad为什么不能是类成员

发布于 2022-09-11 21:47:06 字数 509 浏览 25 评论 0

这里为什么public static int Add2(int a, int b) => { return a + b; }//语句lambda
直接一片红。使用表达式Lambda却没有问题

using System;

namespace 匿名函数与委托
{
    class Program
    {
        public delegate string Del(string str);

        public static int Add(int a, int b) => a + b;//表达式lambda
        //public static int Add2(int a, int b) => { return a + b; }//语句lambda

        static void Main(string[] args)
        {
            Console.WriteLine("{0}", Add(1,2));
        }
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

冷…雨湿花 2022-09-18 21:47:06

因为你这并不是 lambda 呀。

仔细看:

public static int Add2(int a, int b) => { return a + b; }

public static int Add2(int a, int b)
{
    return a + b; 
}

明明有了{},却多了 =>,这样编译器也搞不懂,你是在定义普通方法,还是想用 lambda,你把它搞晕了。实际上,真的是你写错了,并非编译器傻了。

如果你非要写带{}的 lambda,请这样写:

public static Func<int, int, int> Add2 = (a, b) =>
{
    return a + b;
};

public static void test()
{
    var s = Add2(1, 2);
}

Add2 此时是个委托类型,将其赋值为指定匿名方法。使用的时候,就像是使用普通方法一样。

病女 2022-09-18 21:47:06

这是C#6的一个语法糖,不支持代码块可能是因为CLR不能推断了吧

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文