文档介绍:在我们程序中,经常有这样一些需求:1.      需要一个临时方法,这个方法只会使用一次,或者使用的很少。2.      这个方法的方法体很短,以至于比方法声明都短,写起来实在没劲(我将其称之为“一句话方法”)。没办法,这样的方法写起来真是吃力不讨好,比如一些按钮事件处理中,有些按钮点击就是弹出一个对话框,或者调用一下别的什么方法。比如下面的代码: += new ();private void btnRefresh_Click(object sender, EventArgs e){BindData();}这个”Refresh”按钮就是做一下调用一下BindData()数据绑定的方法,为此我们不得不写一个新方法。好了,C#: += delegate(object sender, EventArgs e) { BindData(); };没劲的代码没了。想知道这种写法的幕后黑手么?其实编译器还是在我们的后面干了一件龌龊的事情:它为我们产生了一个新的方法,它只是表面上为我们节省了代码。privatevoid<Test>b__0(object sender, EventArgs e){();}看看这个编译器产生的方法的名称:<Test>b_0,Test是这个匿名方法所放置的地方(因为这个按钮的时间我是放在一个Test方法里的)还有一点需要注意的是,如果这个匿名方法是在实例方法里使用,那么编译器为我们生成的幕后方法也是实例方法,,减少了很多代码阿,但是匿名方法的使用还并不人性化,什么是人性化呢?比如你可以用自然的语言将程序代码读出来,<T>里有一些新增的方法。比如Find,如果使用匿名方法我们如何调用呢:(delegate(Book book){return  < 50;});代码是很简单,但是却无法朗读出来,来看看Lambda表达式的写法:(book=><50);这个Lambda表达式就可以这样阅读出来了:给你一本书,如果它的价格小于50则返回true。好了,那我们就走进Lambda表达式吧:将使用了Lambda表达式的程序集反编译后,我们发现,它实际上和匿名方法没有什么不同。Lambda的输入参数就对应着delegate括号里面的参数,由于Lambda表达式可以推断参数的类型,所以这里的参数无需声明。Lambda操作符读作”Goesto”,它后面紧跟着表达式或者是语句块(这点和匿名方法也不同,匿名方法只能使用语句块而不能使用表达式),下面我就用实例来说明一下有那些类型的Lambda表达式://x的类型省略了,编译器可以根据上下文推断出来,后面跟着的是表达式x =>x+1 deleage(intx){returnx+1;}//后面跟着的是语句块x=>{returnx+1;}delegate(intx){returnx+1;