匿名方法是怎样演变到Lambda表达试过程

一、  "Lambda 表达式"(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。Lambda表达式可以表示闭包(注意和数学传统意义上的不同)。

二、下面代码演示怎么从一个匿名函数(方法) 推导出一个Lambda表达式:

1.首先通过一个匿名方法来创建委托实例,传入一个方法作为变量:

  public void Test()
        {
            Func<string, string> funcToUpper;   //定义一个委托实例,输入参数、返回值都是string类型
            funcToUpper = Upper; //传入一个方法变量
            Console.WriteLine(funcToUpper("lxsh"));
        }
        public string Upper(string str)
        {
            return  str.ToUpper();
        }

2.Upper可以转化一个匿名方法,针对方法体只有一行或者几行的,为了方便代码可阅读性,不建议单独维护一个方法,只需做一个匿名方法既可以

 public void Test()
        {
            Func<string, string> funcToUpper;   //定义一个委托实例,输入参数、返回值都是string类型
            //funcToUpper = Upper; //传入一个方法变量
            funcToUpper = delegate (string str){return str.ToUpper();};
            Console.WriteLine(funcToUpper("lxsh"));
        }

3.在C#3.0语法中出现了"=>"(goes to)语法糖,他可以替换匿名方法;该语法就是Lambda 表达式,

  public void Test()
        {
            Func<string, string> funcToUpper;   //定义一个委托实例,输入参数、返回值都是string类型
            //funcToUpper = Upper; //传入一个方法变量
            // funcToUpper = delegate (string str){return str.ToUpper();};  //匿名方法
            funcToUpper =  (string str)=>{return str.ToUpper();};
            Console.WriteLine(funcToUpper("lxsh"));
        }

4.到第三步为止Lambda 表达式其实看起来和匿名方法一样,然并没有节省多大空间,或并没有增加代码的可读性,下面讲一下Lambda 表达式的快捷语法,

第一个快捷语法:以省略参数类型,因为定义委托的时候已经设置好了参数类型,它可以自动推算参数类型;且当只有一个参数的时候可以去掉小括号,

  public void Test()
        {
            Func<string, string> funcToUpper;   //定义一个委托实例,输入参数、返回值都是string类型
           //funcToUpper = Upper; //传入一个方法变量
           //funcToUpper = delegate (string str){return str.ToUpper();};  //匿名方法
           //funcToUpper =  (string str)=>{return str.ToUpper();};
             funcToUpper = str=>{return str.ToUpper();};
            Console.WriteLine(funcToUpper("lxsh"));
        }

第二快捷语法:当方法体只有一行时可以去掉大括号,且如果有返回值可以去掉return

public void Test()
        {
            Func<string, string> funcToUpper;   //定义一个委托实例,输入参数、返回值都是string类型
           //funcToUpper = Upper; //传入一个方法变量
           //funcToUpper = delegate (string str){return str.ToUpper();};  //匿名方法
           //funcToUpper =  (string str)=>{return str.ToUpper();};
           // funcToUpper = str=>{return str.ToUpper();};
            funcToUpper = str=> str.ToUpper();
            Console.WriteLine(funcToUpper("lxsh"));
        }

5.从匿名方法到Lambda 表达式完整的演变过程如下:

原文地址:https://www.cnblogs.com/lxshwyan/p/10815138.html

时间: 2024-10-26 22:26:06

匿名方法是怎样演变到Lambda表达试过程的相关文章

18、(番外)匿名方法+lambda表达式

概念了解: 1.什么是匿名委托(匿名方法的简单介绍.为什么要用匿名方法) 2.匿名方法的[拉姆达表达式]方法定义 3.匿名方法的调用(匿名方法的参数传递.使用过程中需要注意什么) 什么是匿名方法? 匿名方法是C#2.0引入的一个新特性,它允许开发者声明自己的函数代码而无须使用委托函数. C#为委托提供一种机制,可以为委托定义匿名方法,匿名方法没有名称,编译器会定指定一个名称,匿名方法中不能使用跳转语句跳转到该匿名方法的外部,也不能跳转到该方法的内部.也不能在匿名方法外部使用的ref和out参数.

委托,匿名方法,Lambda,泛型委托,表达式树

一.委托:完成一个委托应分三个步骤://step01:首先用delegate定义一个委托;public delegate int CalculatorAdd(int x, int y);//step02:声明一个方法来对应委托.public int Add(int x, int y){ return x + y;}protected void FrmTest_Load(object sender, EventArgs e){ //step03:用这个方法来实例化这个委托. CalculatorA

C# 2.0 中的新增功能03 匿名方法

连载目录    [已更新最新开发文章,点击查看详细] 在 2.0 之前的 C# 版本中,声明委托的唯一方式是使用命名方法. C# 2.0 引入匿名方法,在 C# 3.0 及更高版本中,Lambda 表达式取代匿名方法作为编写内联代码的首选方式. 但是,本主题中有关匿名方法的信息也适用于 Lambda 表达式. 在有一种情况下,匿名方法提供 Lambda 表达式中没有的功能. 使用匿名方法可省略参数列表. 这意味着匿名方法可转换为具有多种签名的委托. Lambda 表达式无法实现这一点. 有关 L

委托学习笔记后续:泛型委托及委托中所涉及到匿名方法、Lambda表达式

引言: 最初学习c#时,感觉委托.事件这块很难,其中在学习的过程中还写了一篇学习笔记:委托.事件学习笔记.今天重新温故委托.事件,并且把最近学习到和委托相关的匿名方法.Lambda表达式及泛型委托记录下来,以备复习使用. 委托: 日常工作中,常常见到委托用在具体的项目中.而且委托使用起来相对来说也是非常简单的,下面列举一个委托实例用以说明如何使用委托,代码如下: class Program { public delegate int CalculateDelegate(int x, int y)

十二、C# 委托与Lambda表达式(匿名方法的另一种写法)

委托与Lambda表达式 1.委托概述 2.匿名方法 3.语句Lambda 4.表达式Lambda 5.表达式树 一.委托概述 相当于C++当中的方法指针,在C#中使用delegate 委托来提供相同的功能, 它将方法作为对象封装起来,允许在"运行时"间接地绑定一个方法调用. 声明的委托相当于一种自定义的数据类型. 1.背景 冒泡排序 1 static class SimpleSort1 2 { 3 public static void BubbleSort(int[] items)

匿名方法,Lambda表达式,高阶函数

原文:匿名方法,Lambda表达式,高阶函数 匿名方法 c#2.0引入匿名方法,不必创建单独的方法,因此减少了所需的编码系统开销. 常用于将委托和匿名方法关联,例如 1. 使用委托和方法关联: this.btnRefresh.Click += new System.EventHandler(this.btnRefresh_Click);private void btnRefresh_Click(object sender, EventArgs e){    BindData();} 2. 使用委

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

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

C#Lambda表达式的理解:谓词方法 匿名方法 使用Lambda

Lambda表达式 "Lambda表达式"是一个匿名函数,是一种高效的类似于函数式编程的表达式,Lambda简化了开发中需要编写的代码量.它可以包含表达式和语句,并且可用于创建委托或表达式目录树类型,支持带有可绑定到委托或表达式树的输入参数的内联表达式.所有Lambda表达式都使用Lambda运算符=>,该运算符读作"goes to".Lambda运算符的左边是输入参数(如果有),右边是表达式或语句块. 下面三个方法会帮你会容易理解到Lambda表达式的好处,

C# 匿名委托、匿名方法、匿名对象、Lambda表达式

一.匿名类型可通过使用 new 运算符和对象初始值创建匿名类型.示例:var v = new { Name = "Micro", Message = "Hello" };var v = new[] {     new { Name = "Micro", Message = "Hello" },     new { Name = "Soft", Message = "Wold!" }};匿