匿名方法是怎样演变到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 表达式完整的演变过程如下:

匿名方法是怎样演变到Lambda表达试过程的更多相关文章
- 18、(番外)匿名方法+lambda表达式
概念了解: 1.什么是匿名委托(匿名方法的简单介绍.为什么要用匿名方法) 2.匿名方法的[拉姆达表达式]方法定义 3.匿名方法的调用(匿名方法的参数传递.使用过程中需要注意什么) 什么是匿名方法? 匿 ...
- 委托、匿名方法到lambda表达式
在项目中我们经常会接触lambda表达式,链式操作简洁明了.帮我们省了不少事.面对这么神奇的一个东西,是不是也应该了解了解它的本质呢. 今天我们通过一步一步的演变揭开lambda表达式的本质 一.委托 ...
- 委托,匿名方法,Lambda,泛型委托,表达式树
一.委托:完成一个委托应分三个步骤://step01:首先用delegate定义一个委托;public delegate int CalculatorAdd(int x, int y);//step0 ...
- lambda 委托 匿名方法
委托: delegate是C#中的一种类型,它实际上是一个能够持有对某个方法的引用的类.与其它的类不同,delegate类能够拥有一个签名(signature),并且它只能持有与它的签名相匹配的方法的 ...
- 无法将匿名方法转换为System.Delegate
在WinForm中,不允许非UI线程访问UI,如果非UI线程需要跨线程调用UI控件,通常的解决办法是使用Control类中的Invoke方法,传递给该方法一个委托和委托调用的参数列表(params [ ...
- 【C#复习总结】细说匿名方法
1 前言 本系列会将[委托] [匿名方法][Lambda表达式] [泛型委托] [表达式树] [事件]等基础知识总结一下.(本人小白一枚,有错误的地方希望大佬指正) 系类1:细说委托 系类2:细说匿名 ...
- C#2.0新增功能03 匿名方法
连载目录 [已更新最新开发文章,点击查看详细] 在 2.0 之前的 C# 版本中,声明委托的唯一方式是使用命名方法. C# 2.0 引入匿名方法,在 C# 3.0 及更高版本中,Lambda 表 ...
- 匿名方法、Lambda表达和自定义泛型委托以及Func、Action系统泛型委托
1.匿名方法的概念:一个方法没有具体的名称,而只有关键字delegate.方法参数.方法体.这种方法是匿名方法. 匿名方法的好处:将具体方法和委托直接关联在一起,如果我们基于委托只需要一个方法的时候, ...
- c#-委托,匿名方法,lambda表达的关系
什么是委托: 包含单个方法的委托和函数指针是相似的,不同的是,委托是面向帝乡的并且是类型安全的 声明委托类型: delegate void mydel(int x); 声明委托和声明方法差不多,两个不 ...
随机推荐
- elk 7.2
Elasticsearch 7.0开始内置了Java环境 1.jvm.options配置建议 Xmx和Xms设置成一样 Xmx不要超过机器内存的50% 不要超过30GB https://www.ela ...
- 【MySQL高可用架构设计】(一)-- mysql复制功能介绍
一. 介绍 Mysql的复制功能是构建基于SQL数据库的大规模高性能应用的基础,主要用于分担主数据库的读负载,同时也为高可用.灾难恢复.备份等工作提供了更多的选择. 二.为什么要使用mysql复制功能 ...
- CPDF_Document
auto pDoc = std::unique_ptr<CPDF_Document>(); pDoc->CreateNewDoc(); auto pDict = CPDF_Dicti ...
- Emu8086三种格式的代码-(顺序,分支,循环)
这个学期准备考研,于是就没有怎么听别的课,现在临近期末,汇编成了个难题.下面是我学校的实验报告 做一个复习的记录吧,下面的代码都是在Emu8086上运行出来的代码 下面先介绍一下,汇编里面的格式问题 ...
- 7.Vue的计算属性
1.什么是计算属性 computed:计算属性的重点突出在 属性 两个字上(属性是名词),首先它是个 属性 其次这个属性有 计算的能力(计算是动词),这里的 计算 就是个函数:简单点说,它就是一个能够 ...
- ESA2GJK1DH1K升级篇: 快速的移植升级程序到自己的项目(APP用户程序制作)
前言 用户程序比较简单,但是起着至关重要的作用 用户程序是和BootLoader程序相互配合的 拷贝文件到自己的项目 APP用户程序的 stmflash.c stmflash.h 和 上一节的Boot ...
- cf1039D 分块
cf1039D 链接 cf 思路 一次k可以贪心O(n)算. 对于\(≤\sqrt{n}\)的k,暴力算. 对于\(>\sqrt{n}\)的k,最多会有\(\sqrt{n}\)种答案,而且答案单 ...
- 关于RAMOS所用的操作系统
关于RAMOS所用的操作系统 RAMOS所用的操作系统,XP就不用说了,精简版最小的600MB到1.5GB的都有.现代意义上的WIN7/8/10 RAMOS一般选用精简版操作系统,节约内存的同时,还能 ...
- [LeetCode] 491. Increasing Subsequences 递增子序列
Given an integer array, your task is to find all the different possible increasing subsequences of t ...
- [LeetCode] 28. Implement strStr() 实现strStr()函数
Implement strStr(). Return the index of the first occurrence of needle in haystack, or -1 if needle ...