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);
}