Lambda主要用于匿名函数和Linq,因为Ling我并未做过任何笔记!现在主要通过匿名函数说说Lambda来说吧!
1:匿名函数
匿名函数并不是传统意义上的函数,他不是类的方法,匿名函数纯是为了委托实现的!
eg: 为Timer的Elapsed事件添加处理函数;
myTimer.Elapsed += delegate(object o,EventArgs e)
{
Console.Write("这是匿名函数");
}
需要注意,匿名函数容易带来混搅,因为,委托的定义和匿名函数都需要用到delegate关键字!
一般情况,如果函数的代码过短,一两句语句,匿名函数在运行上和编写上都会十分有效率!如果函数的代码体过长,就需要传统的自定义函数了,这是为了方便代码的重用!
2:Lambda表达式
实际上,lambda表达式简化匿名方法的一种。第一部分(匿名函数)的代码,可以使用Lambda表达式从写。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Timers;
using System.Threading;
namespace Test
{
public class Test
{
static void Main(string[] args)
{
//因为Threading名称空间里也含有Timer类,所以,要指明使用的哪个!
System.Timers.Timer myTimer = new System.Timers.Timer(500);
System.Timers.Timer myTimer2 = new System.Timers.Timer(500);
//使用lambda表达式!
myTimer.Elapsed += (o,q) => Console.WriteLine("Lambda");
//使用普通的方法来为事件添加处理函数!
myTimer2.Elapsed += Write1;
myTimer.Start();
myTimer2.Start();
Console.Read();
}
public static void Write1(Object o, EventArgs e)
{
Console.WriteLine("usually");
}
}
}
结果:
Lambda有三个部分组成:1)放在括号里面的参数(一般不需要指定类型) 2)=> 运算符 3)C#运算符
lambda表达式使用类型推理功能确定所传送参数的类型,其实这不是必须的。我们也可以指定参数类型。eg: (int param1,int param2)=>param1+param2;
注意,如果有多个参数,不能一个指定类型,一个不指定。
注意,如果没有定义参数,可以使用空括号来表示eg: ()=>Math.PI
lambda表达式语句体
注意,如果语句体包含多个语句,只需要一个大括号就行eg: (param1,param2)=>{ 。。。。 }
注意,返回类型方面,如果lambda表达式代表的函数不是返回void ,需要使用return语句eg:(param1,param2)=>{return param1+param2;}