=> 读作“导出”goes to,个人认为导出翻译的不好。
lambda 表达式有两种,expression lambda 和 statement lambda。也就是说lambda表达式不光支持表达式,还支持大括号括起来的任意多条语句。如:
x => x+1
x => {return x + 1;}
(x, y) => x*y
与匿名方法的关系:
在功能上,lambda表达式是匿名方法的一个超集。lambda还提供了一些额外的功能:
- Lambda表达式能推测出参数的类型,程序中无需声明参数类型。
- Lambda表达式支持用语句块或者表达式作为方法体。
- 在以参数传递时, Lambda表达式能够判断参数类型,并选择重载的方法。
- Lambda表达式能够转化为表达式树。
与委托的关系:
如满足下面3个条件,lambda表达式与委托类型兼容:
- lambda表达式与委托类型的参数个数相同。
- lambda表达式的每个参数都能被隐式的转换为委托类型的参数类型。
- lambda表达式的返回值能够被隐式的转换为委托类型的返回值。
如:
Func<DataTime> getDateTime = () => DateTime.Now; //无参数
Action<string> printExplicit = (string s) => Console.WriteLine(s); //显式类型的字符串参数
Func<int, int, int> compare = (int x, int y) =>
{
if (x > y) return 1;
if (x < y) return -1;
return 0;
}
内容部分摘自《LINQ in Action》一书。