lambda表達式

 lambda表达式是对匿名方法的一种改进,具有更加简洁的语法和更易理解的形式,lambda表达式可以包括表达式和语句,并且可以用与创建委托或表达式目录树类型。

  lambda表达式都使用Lambda运算符=>,读作goes to。该Lambda运算符的左边是输入参数,右边包含表达式或者语句块。

Lambda表达式的声明:(参数列表)=>{方法体}

  其中的参数列表和普通方法的参数列表相同,Lambda表达式是升级版的匿名方法,如下面语法所示:

返回类型  方法名(参数){方法体}  //普通方法
delegate (参数列表) {方法体}  //匿名方法
(参数列表)=>{方法体}  //

 几种Lambda表达式形式:

   1.(x,y)=>x*y;   //多参数,隐式类型=>表达式

   2. x=>x*10;       //单参数,隐式类型=>表达式

   3. x=>{return x*10;};  //单参数,隐式类型=>语句块

   4.(int x)=>x*10;   //单参数,显式类型=>表达式

   5.(int x)=>{return x*10};   //单参数,显式类型=>语句块

   6.()=>Console.WriteLine();  //无参数

   举个例子:

//求兩個整數最大值
         (int x, int y) => { return x > y ? x : y; };
      (string text) => { double d; return double.TryParse(text,out d); };
//輸入hello world
     () => { Console.WriteLine("hello world"); };

 看了上面例子,俱你能看出,代码很简节,这些表达式,到是怎么回事呢?
  首先我们看下委托

//委托  逛超市
        delegate int GuangChaoshi(int a);
        static void Main(string[] args)
        {
            GuangChaoshi gwl = JieZhang;
            Console.WriteLine(gwl(10) + "");   //打印20,委托的应用
            Console.ReadKey();
        }
        
        //结账
        public static int JieZhang(int a)
        {
            return a + 10;
        }

改写成

//委托  逛超市
        delegate int GuangChaoshi(int a);
        static void Main(string[] args)
        {          
           // GuangChaoshi gwl = JieZhang;
            GuangChaoshi gwl = p => p + 10;
            Console.WriteLine(gwl(10) + "");   //打印20,表达式的应用
            Console.ReadKey();
        }

从上面例子中可以看出Lambda表达式是一种特殊的匿名函数。

复杂的lambda表达式

/// <summary>
        /// 委托  逛超市
        /// </summary>
        /// <param name="a">花费</param>
        /// <param name="b">付钱</param>
        /// <returns>找零</returns>
        delegate int GuangChaoshi(int a,int b);
        static void Main(string[] args)
        {
            GuangChaoshi gwl = (p, z) =>
            {
                int zuidixiaofei = 10;
                if (p < zuidixiaofei)
                {
                    return 100;
                }
                else
                {
                    return z - p - 10;
                }
           
            };
            Console.WriteLine(gwl(10,100) + "");   //打印80,z对应参数b,p对应参数a
            Console.ReadKey();
        }

下面我介绍一个系统指定的Fun<T>委托
 

T 是参数类型,这是一个泛型类型的委托,用起来很方便的。

例子

static void Main(string[] args)
        {
            Func<int, string> gwl = p => p + 10 + "--返回类型为string";            
            Console.WriteLine(gwl(10) + "");   //打印‘20--返回类型为string’,z对应参数b,p对应参数a
            Console.ReadKey();
        }

说明: 我们可以看到,Func<int,string>表示的是返回一个string类型,并带有int類型參數的函数。

再看一个例子

static void Main(string[] args)
        {
            Func<int, int, bool> gwl = (p, j) =>
                {
                    if (p + j == 10)
                    {
                        return true;
                    }
                    return false;
                };
            Console.WriteLine(gwl(5,5) + "");   //打印‘True’,z对应参数b,p对应参数a
            Console.ReadKey();
        }
原文地址:https://www.cnblogs.com/xiaowuzi/p/3532600.html