Lambda表达式演变

Lambda表达式是一种匿名函数。

演变步骤:

一般的方法委托 => 匿名函数委托 => Lambda表达式

Lambda表达式其实并不陌生,他的前生就是匿名函数,所以要谈Lambda表达式,就不得不谈匿名函数,要谈匿名函数,那又要不得不谈委托。

委托非常好理解,类似于C++里面的函数指针(指向了一个方法),并且委托约束了待指向方法的签名(由返回类型和参数组成)。

首先,定义一个委托如 :

delegate int ProcessInt(int i);

定义了委托可以像变量一样传递方法。如:

 void Sample(ProcessInt pro)

这时我们需要写与委托签名一样的方法:

         int Double(int i)
         {
             return i * 2;
         }

         int Divide(int i)
         {
             return Convert.ToInt32(i / 2);
         }

对一个很简单的操作,来说,这样重复定义方法很麻烦,不够优雅,.net 2.0 出现了匿名方法,像这样:

Sample(delegate(int i) { return i * 2; });  //匿名方法 

现在好了,要调什么方法,我不用再定义方法了,但是写程序还是要敲很多字符,好,Lambda表达式来了。它是这样写的:

Sample(i => i * 2);   //Lambda表达式

或者说,这样

Sample2((i, k) => i * k);
 

代码:

执行Test就可以验证结果。  

delegate int ProcessInt(int i);
         delegate int Add(int i, int k);
         int Double(int i)
         {
             return i * 2;
         }

         int Divide(int i)
         {
             return Convert.ToInt32(i / 2);
         }

         void Sample(ProcessInt pro)
         {
             int i = 30;
             Console.WriteLine(pro(i));

         }

         void Sample2(Add pro)
         {
             int i = 30;
             int k = 5;
             Console.WriteLine(pro(i,k));

         }

        public void Test()
        {
            Sample(Double);
            Sample(Divide);   //委托
            Sample(delegate(int i) { return i * 2; });  //匿名方法
            Sample(i => i * 2);   //Lambda表达式
            Sample(i => Convert.ToInt32(i / 2));
            Sample2((i, k) => i * k);

        }

时间: 2024-10-12 12:43:50

Lambda表达式演变的相关文章

lambda表达式之进化

前言 在C#我们可以自定义委托,但是C#为什么还要内置泛型委托呢?因为我们常常要使用委托,如果系统内置了一些你可能会用到的委托,那么就省去了定义委托,然后实例化委托的步骤,这样一来既使代码看起来简洁而干净又能提高程序员的开发速度,何乐不为呢!通过本文可以让你复习扩展方法,同时可以循序渐进的了解系统内置泛型委托的实现以及委托逐步的演化过程. Action 概念:封装一个方法,该方法具有五个参数并且不返回值.并且类型参数为逆变 下面我就自定义实现一个Action<T>无返回值的委托.我们同样定义一

Lambda表达式和表达式树

在C# 2.0中,通过方法组转换和匿名方法,使委托的实现得到了极大的简化.但是,匿名方法仍然有些臃肿,而且当代码中充满了匿名方法的时候,可读性可能就会受到影响.C# 3.0中出现的Lambda表达式在不牺牲可读性的前提下,进一步简化了委托. LINQ的基本功能就是创建操作管道,以及这些操作需要的任何状态.这些操作表示了各种关于数据的逻辑,例如数据筛选,数据排序等等.通常这些操作都是用委托来表示.Lambda表达式是对LINQ数据操作的一种符合语言习惯的表示方式. Lambda表达式不仅可以用来创

C#中的Lambda表达式和表达式树

在C# 2.0中,通过方法组转换和匿名方法,使委托的实现得到了极大的简化.但是,匿名方法仍然有些臃肿,而且当代码中充满了匿名方法的时候,可读性可能就会受到影响.C# 3.0中出现的Lambda表达式在不牺牲可读性的前提下,进一步简化了委托. LINQ的基本功能就是创建操作管道,以及这些操作需要的任何状态.这些操作表示了各种关于数据的逻辑,例如数据筛选,数据排序等等.通常这些操作都是用委托来表示.Lambda表达式是对LINQ数据操作的一种符合语言习惯的表示方式. Lambda表达式不仅可以用来创

lambda表达式学习笔记(1) -- 作为委托的lambda表达式

C#中的Lambda表达式就是C# 2中匿名方法的演变,因此从一个匿名函数开始一步步简化写法. 例子是获取一个string参数,然后返回一个int. 首先匿名方法的写法如下: Func<string, int> returnLength; returnLength = delegate (string text) { return text.Length; }; Console.Write(returnLength("Hello")); lambda表达式最冗长的形式是:

Java8新特性Stream API与Lambda表达式详解(1)

1 为什么需要Stream与Lambda表达式? 1.1  为什么需要Stream Stream作为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念.它也不同于 StAX 对 XML 解析的 Stream,也不是 Amazon Kinesis 对大数据实时处理的 Stream.Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利.高效的聚合操作(aggr

C# in depth (第九章 Lambda表达式和表达式树)

LINQ 的基本功能就是创建操作管道,以及这些操作需要的任何状态. 这些操作表示了各种关于数据的逻辑:如何过滤,如何排序以及如何将不同的数据源连接在一起. 9.1 作为委托的Lambda表达式 从许多方面,Lambda表达式都可以看作是C#2.0的匿名方法的一种演变.匿名方法能做的几乎一切事情都可以用Lambda表达式来完成. 表达式的类型本身并非委托类型,但它可以通过多种方式隐式或显示地转换成一个委托实例. 9.1.1 准备工作: Func<...>委托类型简介 如果我们需要获取一个stri

从匿名方法到 Lambda 表达式的推演过程

Lambda 表达式是一种可用于创建委托或表达式目录树类型的匿名函数. 通过使用 lambda 表达式,可以写入可作为参数传递或作为函数调用值返回的本地函数. 以上是msdn官网对Lambda 表达式的描述.实质上Lambda 表达式可以说是从匿名方法推演而来,微软程序员为了提高我们广大程序员的生产效率推出了Lambda 表达式,它的出现无疑是极具影响力的. Lambda 表达式使用Lambda 运算符=>,我们一般读作“goes to”,当然这并不是说它跟C#中的goto有相同的含义,只是都有

java8(一)Lambda表达式

其实很久前已经学习过了Lambda表达式,但是学习后没有多少使用的机会,久而久之也就忘记(惭愧).最近新的项目用的jdk8所以准备再学习一次,写下文章也是为了记录,方便以后再忘的时候,不用到处找资料(旁白:这么丢人的事,能别到处说吗). 语法 (参数) -> 表达式 或 (参数) -> {表达式} 第一个Lambda表达式 public class Java8Lambda { @Test public void test1() { // lambda表达式 Greeting helloLamb

Lambda表达式实战视频教程

视频教程地址: https://my.oschina.net/u/3217554/blog/1507456 1:Lambda表达式及函数式接口介绍 2:Lambda表达式详解 3:方法的引用(一) 4:方法的引用(二) 5:Stream API(一) 6:Stream API(二) 7:Lambda表达式.方法的引用.Stream API实战