匿名方法是怎么演变到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(); 
 }

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

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

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

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

第二快捷语法:当方法体只有一行时可以去掉大括号,且如果有返回值可以去掉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"));    
        }

5.从匿名方法到Lambda 表达式完整的演变过程如下:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值