H5W3
当前位置:H5W3 > 其他技术问题 > 正文

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));
        }
    }
}

回答:

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

本文地址:H5W3 » C#中语句lambad为什么不能是类成员

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址