1.什么是Lambda表达式
“Lambda 表达式”是一个匿名函数,它可以包含表达式和语句,并且可用于创建委托或表达式目录树类型。 所有 Lambda 表达式都使用 Lambda 运算符 =>,该运算符读为“goes to”。该 Lambda 运算符的左边是输入参数(如果有),右边包含表达式或语句块
2.Lambda表达式格式:
(参数列表)=> 表达式或语句块,左边参数列表可以有多个参数,一个参数,或者无参数;参数类型可以隐式或者显式。例如:
(x, y) => x * y //多参数,隐式类型=> 表达式
x => x * 10 //单参数,隐式类型=>表达式
x => { return x * 10; } //单参数,隐式类型=>语句块
(int x) => x * 10 //单参数,显式类型=>表达式
(int x) => { return x * 10; } //单参数,显式类型=>语句块
() => Console.WriteLine() //无参数
由上面这些语句我们可以得出Lambda表达式的一些要点:
1.参数类型可以忽略,因为可以根据使用的上下文进行推断而得到;
2.表达式的主体可以是表达式((x, y) => x * y ),也可以是语句块(x => { return x * 10; })
3.Lambda表达式传入的实参将参与类型推断,以及方法重载辨析。
4.Lambda表达式表达式和表达式体可以被转换为表达式树
3.Lambda表达式与委托类型
public delegate int TestIntDelegate(int g); public class TestClass { static void Main() {//TestIntDelegate ti = new TestIntDelegate(mydelegate); Console.WriteLine(Test(mydelegate));
Console.Write(Test(y => y * y)); Console.ReadLine(); } public static int Test(TestIntDelegate ti) { return ti(10); } //必须写成静态 public static int mydelegate(int i) { return i * i; } }
Lambda表达式可以被转成委托类型,但必须满足以下几点:
1.两者参数个数相同
2.参数类型相同,注意隐式类型要参与类型辨析
3.委托的返回类型要与Lambda的相同,不论是表达式还是语句块1