在.NET3.0版本中微软推出了Lambda表达式。这使代码的表述可以更加优雅。但是对于新事物大多会本能的排斥,虽然3.0版本已经推出了好久了,但是我向周围的人了解了一下,用Lambda的人不是很多,即使有可以使用的场合也用旧方法来代替。其实Lambda表达式并不神秘,下面让我们一起来揭开C# Lambda的面纱。

 
下面这段简单的程序是包含了一段Lambda表达式,
    class Program
    {
        delegate string MyDelagate(string val1, string val2);
 
        static void Main(string[] args)
        {
            MyDelagate my = (param1, param2) =>
            {
                string test = " 内部变量 ";
                return param1 + param2 + test;
            };
 
            
            Console.WriteLine(my(" 参数1 ", " 参数2 "));
 
            Console.Read();
        }  

}

 
运行结果如下:
 
当然这个小例子并没有体现出Lambda的优势所在,Lambda的好处会在下一章会介绍。我们先去看看Lambda表达式的本质,正所谓透过现象看本质。现在需要一款反编译的工具
.net reflector (下载网址:http://115.com/lb/5lbd3lgqkupj) 打开该软件,将编译的项目文件用reflector 打开
 
反编译的结果和我们写的基本一致,因为我们选择了4.0,微软在3.0的时候已经推出的Lambda表达式。让我们选择.NET2.0,然后再进行反编译,看看会变成什么样子。
 
 
熟悉不? 这不就是我们所熟悉的匿名方法的写法吗。
 
既然Lambda表达式就是匿名方法写法的升级,那么在.net平台还不支持匿名方法的时候,会被反编译成什么样子呢。
 
 
我们还原一下程序:这是用一个委托,调用了一个方法,方法返回了三个变量拼接的字符串。 这段程序和之前的Lambda表达式实现的功能是一致的。
    class Class2
    {
        private delegate string MyDelagate(string val1, string val2);
 
        static void Main(string[] args)
        {
 
            MyDelagate my = new MyDelagate(Method);
            Console.WriteLine(my(" 参数1 ", " 参数2 "));
            Console.Read();
            return;
        }
 
        private static string Method(string param1, string param2)
        {
            string test = " 内部变量 ";
            return (param1 + param2 + test);
        }
 

}

 
 
通过上述的分析我们已经揭开了Lambda的面纱,同时也揭开了Lambda的发展历程。
1.在.net1.0的时候,我们在程序中只能通过方法调用来实现功能
2.或者通过定义委托来进行方法调用
3.在.net2.0中支持了匿名委托,所以可以通过编写匿名方法来实现功能。
4.在.net3.0中推出了Lambda表达式,它让我们在实现功能的同时,美化了代码结构。
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Lambda表达式的面纱(一)的更多相关文章

  1. 【转载】C++ function、bind和lambda表达式

    本篇随笔为转载,原贴地址:C++ function.bind和lambda表达式. 本文是C++0x系列的第四篇,主要是内容是C++0x中新增的lambda表达式, function对象和bind机制 ...

  2. Java 8新特性探究(一) JEP126特性lambda表达式和默认方法

    Lambda语法 函数式接口 函数式接口(functional interface 也叫功能性接口,其实是同一个东西).简单来说,函数式接口是只包含一个方法的接口.比如Java标准库中的java.la ...

  3. python 可迭代对象,迭代器和生成器,lambda表达式

    分页查找 #5.随意写一个20行以上的文件(divmod) # 运行程序,先将内容读到内存中,用列表存储. # l = [] # 提示:一共有多少页 # 接收用户输入页码,每页5条,仅输出当页的内容 ...

  4. C# Lambda表达式学习笔记

    本笔记摘抄自:https://www.cnblogs.com/leslies2/archive/2012/03/22/2389318.html,记录一下学习过程以备后续查用.     一.Lambda ...

  5. 你知道C#中的Lambda表达式的演化过程吗?

    那得从很久很久以前说起了,记得那个时候... 懵懂的记得从前有个叫委托的东西是那么的高深难懂. 委托的使用 例一: 什么是委托? 个人理解:用来传递方法的类型.(用来传递数字的类型有int.float ...

  6. Linq表达式、Lambda表达式你更喜欢哪个?

    什么是Linq表达式?什么是Lambda表达式? 如图: 由此可见Linq表达式和Lambda表达式并没有什么可比性. 那与Lambda表达式相关的整条语句称作什么呢?在微软并没有给出官方的命名,在& ...

  7. 背后的故事之 - 快乐的Lambda表达式(一)

    快乐的Lambda表达式(二) 自从Lambda随.NET Framework3.5出现在.NET开发者眼前以来,它已经给我们带来了太多的欣喜.它优雅,对开发者更友好,能提高开发效率,天啊!它还有可能 ...

  8. Kotlin的Lambda表达式以及它们怎样简化Android开发(KAD 07)

    作者:Antonio Leiva 时间:Jan 5, 2017 原文链接:https://antonioleiva.com/lambdas-kotlin/ 由于Lambda表达式允许更简单的方式建模式 ...

  9. java8中lambda表达式的应用,以及一些泛型相关

    语法部分就不写了,我们直接抛出一个实际问题,看看java8的这些新特性究竟能给我们带来哪些便利 顺带用到一些泛型编程,一切都是为了简化代码 场景: 一个数据类,用于记录职工信息 public clas ...

随机推荐

  1. PowerDesigner与UML建模应用

    一.   PD简介 PowerDesigner 是一个集所有现代建模技术于一身的完整工具,它集成了强有力的业务建模技术.传统的数据库分析和实现,以及UML对象建模.通过了元数据的管理.冲突分析和真正的 ...

  2. objective-C nil,Nil,NULL 和NSNull的小结

    nil用来给对象赋值(Object-C的任何对象都属于id类型),NULL则给任何指针赋值,NULL和nil不能互换,nil用于类指针赋值(在Object-C中类是一个对象,是类的meta-class ...

  3. java基础知识再学习--HashMap与ConcurrentHashMap的区别

    引用:http://blog.csdn.net/xuefeng0707/article/details/40834595 从JDK1.2起,就有了HashMap,正如前一篇文章所说,HashMap不是 ...

  4. 【1】Laravel5.1 安装

    1.安装composer http://www.phpcomposer.com/ 这个是中文网址里边有教程,但是由于被墙的缘故,可以通过下边这个链接下载Windows安装包 http://docs.p ...

  5. 第一个程序 - Windows程序设计(SDK)001

    愉快的开始 让编程改变世界 Change the world by program 编译器安装 我们经常说的 VS 指的就是 Microsoft Visual Studio 的简称,它是微软开发工具的 ...

  6. 纯js实现div内图片自适应大小

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. BZOJ 2324 营救皮卡丘

    http://www.lydsy.com/JudgeOnline/problem.php?id=2324 思路:最小费用最大流 考虑设数组d[k][i][j],代表只用前k个城市,i到j的最短路 然后 ...

  8. LeetCode_Recover Binary Search Tree

    Two elements of a binary search tree (BST) are swapped by mistake. Recover the tree without changing ...

  9. Find out C++ Memory Usage in Code

    You can use Microsoft Platform SDK functions to get the heap size at a specific point. If get the he ...

  10. ORA-3136报错

    当使用错误的用户名或密码登陆数据库时,会提示如下报错内容: bash-4.1$ sqlplus a/a@test SQL*Plus: Release 10.2.0.4.0 - Production o ...