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

大漠刀客
  • 185

这里为什么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));
        }
    }
}
回复
阅读 1.3k
2 个回答
什么么么么
  • 383
✓ 已被采纳

因为你这并不是 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不能推断了吧

宣传栏