Lambda表达式

it2024-11-13  14

"Lambda表达式"是一个匿名函数,它可以包含表达式和语句.并可用于创建委托或表达式目录树类型.

运算符

所有Lambda表达式都是用Lambda运算符=>,读做goes to.该运算符左边是输入参数,右边包含表达式或语句块.

Lambda表达式 x=>x*x读作 x goes to x 乘 x.可将此表达式分配给委托类型.

例:

protected void Page_Load(object sender, EventArgs e) { cc c = x => x * x; Response.Write(c(12).ToString()); } public delegate int cc(int i);

在上例中,请注意委托的参数是一个具有int类型的隐式类型输入参数,并返回int.在将lambda表达式转化为该类型的委托时,编译器会隐式的将该表达式中的参数转换为int.并返回一个int类型的值.

=>运算符具有与=运算符同级的优先级,并且是右结合运算符.

Lambda表达式

表达式在右边的Lambda表达式称为"Lambda表达式".采用以下基本形式.

(input parameters)=>expression

在lambda表达式只有一个参数时,括号才是可选的;否则括号是必须的.建议保留括号.

Lambda语句

Lambda语句与Lambda表达式相似,只是语句包含在大括号里.

(input parameters)=>{statement;}

Lambda语句的主体可以包含任意数量的语句.但是通常不会多与两句或三句.

Lambda表达式的类型推理

在编写Lambda时,通常不必为输入参数指定类型,因为编译器可以基于Lambda主体、基础委托类型以及C#3.0语言规范中描述的其他因素推断类型.

Lambda的一般规则如下:

1.lambda包含的参数数量必须与委托类型包含的参数数量一致

2.lambda中每个输入参数必须都能够隐式转换为其对应的委托参数

3.lambda的返回值必须能隐式的转换为委托的返回类型

例子:

bool GetStringWithFourCharacters(string str) { return str.Length == 4; } protected void Page_Load(object sender, EventArgs e) { string[] strs = new string[] { "abcd""bcde", "123s", "acee", }; //方法一、 //创建Func<string,bool>的实例这种方式来获取方法与下面一种直接赋值的做法都可以. //Func<string, bool> func = new Func<string, bool>(GetStringWithFourCharacters); Func<string, bool> func = GetStringWithFourCharacters; IEnumerable<string> result = strs.Where<string>(func); //方法二、 //IEnumerable<string> result = strs.Where<string>(delegate(string x) { return x.Length == 4; }); //方法三、 //IEnumerable<string> result = strs.Where<string>(x => x.Length == 4); foreach (var r in result) { Response.Write(r.ToString()+"<br/>"); } }

这三种方式都可以实将字符串数组中,为四个字符的字符串挑出来的功能.但是,哪一个最简单呢?显然第一个复杂些,第二个和第三个都比较简单.

其实第二个和第三个是等价的.建议使用第三种,上面的例子比较简单,只需要筛选出来即可,如果再要求都转成大写的呢? 再进行排序呢?

protected void Page_Load(object sender, EventArgs e) { string[] strs = new string[] { "abcd", "bcde", "123s", "acee" }; //方法二 //IEnumerable<string> result = strs.Where<string>(delegate(string x) { return x.Length == 4; }) // .Select<string, string>(delegate(string x) { return x.ToUpper(); }) // .OrderBy<string, string>(x => x); //方法三 IEnumerable<string> result = strs.Where<string>(x => x.Length == 4) .Select<string, string>(x => x.ToUpper()) .OrderBy<string, string>(x => x); foreach (var r in result) { Response.Write(r.ToString()+"<br/>"); } }

从代码中,可以看到,使用Lambda表达式似乎更简单一些的

Lambda表达式在上例中的使用是:

选出只有4个字符的字符串将字符串变成大写的进行排序

转载于:https://www.cnblogs.com/oneword/archive/2010/09/07/1820704.html

最新回复(0)