Lambda表达式
程序员文章站
2022-05-22 21:18:45
...
Lambda表达式
介绍
Lambda表达式是一种可用于创建委托或表达式目录树类型的匿名函数。通过使用Lambda表达式,可以写入可作为参数传递或作为函数调用值返回的本地函数。Lambda表达式对于编写LINQ查询表达式特别有用。
说白了,Lambda就是匿名函数的一种简写方式。
用法
在一个简单委托中使用
下面我将用3种方法来实现委托:
class Program
{
public delegate int Sum(int a,int b);
static void Main(string[] args)
{
//Lambda表达式
Sum sum1 = (a, b) => a + b;
//匿名函数
Sum sum2 = delegate(int aa, int bb)
{
return aa + bb;
};
//普通委托
Sum sum3 = caculateSum;
int aaa = 1;
int bbb = 2;
Console.WriteLine("Lambda的结果:{0}", sum1(aaa, bbb));
Console.WriteLine("匿名函数的结果:{0}", sum2(aaa, bbb));
Console.WriteLine("普通委托的结果:{0}", sum3(aaa, bbb));
Console.Read();
}
static int caculateSum(int a, int b)
{
return a + b;
}
}
在上面的代码中:
sum1是通过Lambda表达式初始化了一个委托实例;
sum2是通过匿名函数初始化了一个委托实例;
sum3是通过一个静态方法来初始化一个委托实例;
这3种方式其实表达的意思都是一样的,都将返回a+b的值,但是我们可以看到,使用Lambda表达式仅仅使用了一行代码。
在扩展方法中的使用
下面将用一个简单的扩展方法展示如何在扩展方法中使用Lambda:
List<int> ls = new List<int>()
{
1,2,3,4,5,6
};
int result=ls.Sum(a => { return (a > 3 ? a : 0); });
Console.WriteLine(result);
Console.Read();
运行上面的代码,将发现返回值为15,也就是说返回的是大于3的几个值的和,即4+5+6。其实这里本质上也是一个委托,只是这个扩展方法的参数是一个委托。
这里将扩展方法单独拿出来说的目的是因为,继承自Enumerable的很多类在Linq中都有很多扩展方法,这些扩展方法很多参数都有委托类型,而在调用这些扩展方法时,使用Lambda表达式的方法将会使代码变得更加精减,不过这在理解上就不是那么容易了,但是如果对Lambda表达式有所了解,这将会很清楚的理解。
Lambda表达式的语法
一般写法:
(parm1,parm2...,parmn)=>{
//代码块
}
特殊情况:
当参数只有1个的时候,可以省略括号
parm1=>{
//代码块
}
当函数的语句只有1个时,也可以省略大括号,但是省略后就不能加return,如果不省略就必须按标准的代码块来写。例如下面直接返回所有参数的和:
(parm1,parm2...,parmn)=>parm1+parm2+...+parmn
总结
Lambda表达式最大的有点就是简化了coding和增加了类型安全,本质上Lambda表达式就是一个匿名函数,在编译的时候,编译器将会自动将Lambda表达式转换成匿名函数。如下图: