Lambda的存在意义就是为了简写让工作效率提升.最常见在于委托.当我只需要为委托传一个只会用一次的方法,我还要大费周章的去写那个方法嘛?有了Lambda就不用了
语句Lambda
Lambda在不同的场景下有不同的含义,但用法大同小异
(参数) => {方法体};
他的意思这些参数 用于 后面的方法体.
光看这个抽象的用法你理解不了他的真正意义,来吃点栗子
public int Plus(int a, int b)
{
int result;
result = a + b;
return result;
}
如图,这是我写的一个加法方法,而且特地用了麻烦的方式写,来模拟现实情况可能会比这个更加麻烦.
如果用lambda会变成什么情况
Func<int, int, double> TestDelegate = (a, b) => { return a + b; };
Func是一个C#提供的委托,但我们暂且忽略,我们只需要知道的是Func<int, int, int> TestDelegate创建了一个Func类型的委托,名字叫TestDelegate,委托有两个int参数和一个double返回值.
lambda和委托有着密切联系,如上面代码,就是把第一串代码简写成了
(a, b) => { return a + b; }
lambda形式省略掉了访问修饰符,返回值类型,方法名,和参数类型.
因为lambda的主要作用就是给委托传递方法,像是一个一次性方法,所以不需要访问修饰符,外部也访问不了lambda表达式.
返回值类型和参数类型全部都可以从委托那边得知是什么类型.如上例委托定义了参数1,2为int类,返回值为double类,故编译器在编译该lambda语句时会把lambda语句的参数类型和返回值类型看作是int与double.
lambda着重于方法体,连方法名也省略掉了.没有名字的方法统称匿名方法
表达式Lambda
表达式lambda就是更加简写的语句lambda,像上面的的方法只需要一个return所以可以更进一步简写成这样
Func<int, int, int> TestDelegate = (a, b) => a + b;
连方法体外面的括号都省了
加入有一个方法只为了打印HelloWorld连参数也可以省了
Action TestDelegate = () => Console.WriteLine("Hello World");
Action和Func一样也是微软提供的委托,他们俩用法相似,区别是Action没有返回值.
如上例,参数为空.