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

这里为什么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));
        }
    }
}
阅读 2.5k
2 个回答

因为你这并不是 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 此时是个委托类型,将其赋值为指定匿名方法。使用的时候,就像是使用普通方法一样。

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进