匿名方法是怎样演变到Lambda表达试过程
程序员文章站
2022-03-20 12:21:03
一、 "Lambda 表达式"(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。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 表达式完整的演变过程如下:
上一篇: IO流的原理和概念
下一篇: 学习Linq之前必须要了解的扩展方法