C#3.0中的Lambda表达式和匿名函数。

时间:2022-04-20 02:26:33

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

}

}
}

结果:

C#3.0中的Lambda表达式和匿名函数。

     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}