您的位置:首页 > 编程语言 > C#

c# 3.0 初体验 2 (Lambda表达式)

2007-09-18 21:53 288 查看
C#2.0的匿名方法允许我们以内联的方式来实现委托,而c#3.0的Lambda表达式允许我们使用一种更加接近人的思维,更加自然的方式来实现类似匿名方法的方式。计算机的发展告诉我们,人们对计算机上的研究都是不断在趋近于人的思维,而不是计算机的思维,比如我们已开始使用的汇编语言,然后出现了高级语言,面向对象的高级语言,等等。如何让计算机能够理解普通人的需求,我们程序员的作用就是起这种桥接作用,我们要不断的尝试让计算机更好的理解编成人员的思想。计算机能理解的抽象层级的提高,我们程序员就能更减轻痛苦。看下边的例子:
List.FindAll(
Delegate(string s){
Return s.indexof(“abc”)>0;}
Lambda
List.FindAll(s=>s.indexof(“abc”)>0);
很明显,lamdba表达式更加接近人的思维,而不是象内联方法那样努力的在让计算机来理解,而lambda表达式表达的非常的自然,如果我们能以这样的方式编写程序,那么是多么的舒服。我们上边的内联方式有委托,有返回值,都是为计算机写,而不是趋近于人来思考的东西。
(参数列表)=>表达式或者语句块
(x,y)=〉x*y
其实编译器会将Lambda表达式在编译的时候转化成委托类型。
Lambda表达式和委托类型
Lambda表达式L可以被转化为委托类型D,需要满足:
L和D拥有相同的参数个数。
L的参数类型与D的参数类型相同,主要隐式类型要参与类型辨析。
D的返回类型与L相同,无论L是表达式,还是语句块。
比如x=〉x*10的委托类型就是 delegate int MyDeg(int)
我们有下边的例子:
表达式MyClass.Process((x,y)=>x*y)就等同于下边的一段代码:
MyDletegate md1=new MyDelegate1(XXXXX);
MyClass.Process(md1);
Public static int bool XXXXX(int x,int y)
{
Return x*y;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐