关闭

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

589人阅读 评论(0) 收藏 举报
 
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
}
 
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:30094次
    • 积分:550
    • 等级:
    • 排名:千里之外
    • 原创:20篇
    • 转载:4篇
    • 译文:2篇
    • 评论:9条
    文章分类
    最新评论