zoukankan      html  css  js  c++  java
  • 匿名方法是怎样演变到Lambda表达试过程

         一、  "Lambda 表达式"(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。Lambda表达式可以表示闭包(注意和数学传统意义上的不同)。     

         二、下面代码演示怎么从一个匿名函数(方法) 推导出一个Lambda表达式:

                1.首先通过一个匿名方法来创建委托实例,传入一个方法作为变量:

      public void Test()
            {
                Func<string, string> funcToUpper;   //定义一个委托实例,输入参数、返回值都是string类型
                funcToUpper = Upper; //传入一个方法变量
                Console.WriteLine(funcToUpper("lxsh"));    
            }
            public string Upper(string str)
            {
                return  str.ToUpper(); 
            }
    View Code

               2.Upper可以转化一个匿名方法,针对方法体只有一行或者几行的,为了方便代码可阅读性,不建议单独维护一个方法,只需做一个匿名方法既可以

     public void Test()
            {
                Func<string, string> funcToUpper;   //定义一个委托实例,输入参数、返回值都是string类型
                //funcToUpper = Upper; //传入一个方法变量
                funcToUpper = delegate (string str){return str.ToUpper();};
                Console.WriteLine(funcToUpper("lxsh"));    
            }
    View Code

            3.在C#3.0语法中出现了"=>"(goes to)语法糖,他可以替换匿名方法;该语法就是Lambda 表达式,

      public void Test()
            {
                Func<string, string> funcToUpper;   //定义一个委托实例,输入参数、返回值都是string类型
                //funcToUpper = Upper; //传入一个方法变量
                // funcToUpper = delegate (string str){return str.ToUpper();};  //匿名方法
                funcToUpper =  (string str)=>{return str.ToUpper();};
                Console.WriteLine(funcToUpper("lxsh"));    
            }
    View Code

           4.到第三步为止Lambda 表达式其实看起来和匿名方法一样,然并没有节省多大空间,或并没有增加代码的可读性,下面讲一下Lambda 表达式的快捷语法,

              第一个快捷语法:以省略参数类型,因为定义委托的时候已经设置好了参数类型,它可以自动推算参数类型;且当只有一个参数的时候可以去掉小括号,

      public void Test()
            {
                Func<string, string> funcToUpper;   //定义一个委托实例,输入参数、返回值都是string类型
               //funcToUpper = Upper; //传入一个方法变量
               //funcToUpper = delegate (string str){return str.ToUpper();};  //匿名方法
               //funcToUpper =  (string str)=>{return str.ToUpper();};
                 funcToUpper = str=>{return str.ToUpper();}; 
                Console.WriteLine(funcToUpper("lxsh"));    
            }
    View Code

           第二快捷语法:当方法体只有一行时可以去掉大括号,且如果有返回值可以去掉return

    public void Test()
            {
                Func<string, string> funcToUpper;   //定义一个委托实例,输入参数、返回值都是string类型
               //funcToUpper = Upper; //传入一个方法变量
               //funcToUpper = delegate (string str){return str.ToUpper();};  //匿名方法
               //funcToUpper =  (string str)=>{return str.ToUpper();};
               // funcToUpper = str=>{return str.ToUpper();};
                funcToUpper = str=> str.ToUpper();
                Console.WriteLine(funcToUpper("lxsh"));    
            }
    View Code

        5.从匿名方法到Lambda 表达式完整的演变过程如下:

              

  • 相关阅读:
    【平衡规划】JZOJ4616. 【NOI2016模拟7.12】二进制的世界
    函数中,如何修改形参的默认值
    默认形参在函数定义阶段就已经被赋值,在调用时就可以不用再次赋值了。
    在函数调用时:位置形参、位置实参、关键字实参的特点
    return之为什么能够终止函数,代码演练
    深度理解return具体用法
    函数基础重点掌握内容:创建函数、return返回单个值、return返回多个值、函数名加括号与不加括号的区别
    python之encode和decode编码
    python利用setsockopt获得端口重用
    python并发之多进程
  • 原文地址:https://www.cnblogs.com/lxshwyan/p/10815138.html
Copyright © 2011-2022 走看看