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

        }

 

 

 

你可能感兴趣的:(lambda)