#
前言:
之前小猪曾经分享过自己对[C#委托的一点理解](http://www.smallerpig.com/archives/206) 其实在使用委托的过程中我们会大量的使用拉姆达(=>)表达式
#
介绍:
"Lambda表达式"是一个匿名函数,是一种高效的类似于函数式编程的表达式,Lambda简化了开发中需要编写的代码量。它可以包含表达式和语句,并且可用于创建委托或表达式目录树类型,支持带有可绑定到委托或表达式树的输入参数的内联表达式。所有Lambda表达式都使用Lambda运算符=>,该运算符读作"goes to"。Lambda运算符的左边是输入参数(如果有),右边是表达式或语句块。Lambda表达式x => x * x读作"x goes to x times x"。
自C#3.0开始,就可以使用这种代码赋予委托。只要有委托参数类型的地方,就可以使用Lambda表达式。
ps:lambda表达式的语法比匿名方法简单。如果所调用的方法有参数,且不需要参数,匿名方法的语法就比较简单,因为这样不需要提供参数。
1 | namespace TimeBookMVC4.TEST |
lambda运算符"=>"的左边列出了需要的参数,右边定义了赋予lambda变量的方法的实现代码。
1 | ## |
Func<string, string> oneparam = s => String.Format(
"change uppercase {0}",s.ToUpper\(\));
Console.WriteLine(oneparam("test"));
1 |
|
Func<double, double, double> twoparam = (x, y) => x * y;
Console.WriteLine(twoparam(3,2));
1 |
|
Func<double, double, double> twoparam = (double x,double y) => x * y;
Console.WriteLine(twoparam(3,2));
1 |
##
多行代码
如果Lambda表达式只有一条语句,在方法块内就不需要花括号和return语句,因为编译器会添加一条隐式的return语句。
1 | Func<double, double> square = x => x * x; |
添加花括号、return语句和分号是完全合法的,通常这比不添加这些括号更容易阅读:
1 | Func<double, double> square = x => { |
但是,如果在Lambda表达式的实现代码中需要多条语句,就必须添加花括号和return语句:
1 | Func<string, string> lambda = param => |
1 | ## |
int someVal = 5;
Func<int, int> f = x => x + someVal;
1 |
|
public class AnonymousClass
{
private int someVal;
public AnonymousClass(int someVal)
{
this.someVal = someVal;
}
public int AnonymousMethod(int x)
{
return x + someVal;
}
}
`
使用Lambda表达式并调用该方法,会创建匿名类的一个实例,并传递调用该方法时变量的值。
参考:《C#高级编程(第七版)》