ProcessStringDelegate p = (s) => { Console.WriteLine(s); };
lambda方式使用Filter 委托,非常漂亮:
IEnumerable<int> values2 = Filter(values, i=>i>0);
Lambda语法详解:s为参数列表,不需要标注类型,因为变量声明中类型已经说明了。=>后的大括号是方法体。
如果方法有返回值,并且代码只有一行可以简写i=>i>0,等价于i=>{return i>0;}。
有了lambda代码写的可以更简单。linq、asp.net MVC中用的非常多。
附加:
1. 对lambda的初步理解:可以看成是匿名函数的另外一种写法。
2. lambda能够根据委托推断出参数的类型,所以比匿名函数更简单。
例1:
//=====匿名函数=====//f指向匿名函数//delegate(参数列表){//方法体}FilterDelegate f = delegate(string s1){Console.WriteLine(s1);return false;};f("hello");//======lambda======//能够根据委托推断出参数的类型,所以比匿名函数更简单FilterDelegate f1 = (s1) => {Console.WriteLine("匿名{0}",s1);return false;};f1("wow");//====更简单的简化方法=====FilterDelegate f = (s1) => { return s1 == "tom"; };//======更简化=======//如果lambda表达式中的匿名函数的方法体如果只有一句话,并且//是返回值,那么可以省略{}以及return,就把=>后的表达式做为返回值FilterDelegate f = (s1) => s1 == "tom"; //这是最简化的lambda表达式。平时一般都是用这个写法。Console.WriteLine(f("tom"));
例2:这是一个lambda表达式的应用例子:有一个int类型的数组,要求每个数组元素乘以2后输出。
int[] values = { 3,5,9,8,9,-3,-5};foreach (int i in values.Select(i => i * 2)){Console.WriteLine(i);}//=====返回所有的偶数=====foreach (int i in values.Where(i=>i%2==0)){Console.WriteLine(i);}//======实现排序======foreach (int i in values.OrderBy(i => i)){Console.WriteLine(i);}