(前导知识为委托的基本运用和匿名函数基本知识)
1.匿名方法和lambda表达式
匿名函数这个术语同时涵盖了匿名方法和Lambda表达式,在很多情况下,两者使用相同的转换规则。基本匿名方法能做的事情都可以使用lambda表达式完成。此外,一般情况下lambda表达式都更易读、更紧凑。捕获变量在lambda表达式中的行为和在匿名函数中是一样的。
与匿名方法相似,lambda表达式有特殊的转换规则:表达式的类型本身并非委托类型,但可以通过多种方式隐式或显式的转换成一个委托实例。
2.lambda表达式的格式
lambda表达式的一般格式:
(显示类型参数列表)=> 表达式
"=>" 读作goes to
3.匿名函数与lambda表达式转换规则和实例
例1(一个参数方法体括号不可省略):
Action<int> a=delegate(int i){Console.WriteLine(i)};
Action<int> a=(int i)=>{Console.WriteLine(i)};
//编译器可以自动推断参数类型
Action<int> a=(i)=>{Console.WriteLine(i)};
//一个参数的时候可以省略括号
Action<int> a=i=>{Console.WriteLine(i)};
例2(两个参数方法体括号可省略)
Func<string,int,bool> f=delegate(string s,int i)}{return true};
//如果返回值只有一行代码可以省略方法体括号和return
Func<string,int,bool> f=(string s,int i)=>true
规则总结:
(1)编译器可以自动推断参数类型
(2)一个参数的时候可以省略括号
(3)如果返回值只有一行代码可以省略方法体括号和return
Func<int,int> f=delegate(int i){return i*2};
转换后:Func<int,int> f=i=>i*2;