匿名方法是怎样演变到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); 声明委托和声明方法差不多,两个不 ...
随机推荐
- 磁盘I/O 监控 iostat
iostat -cdxm 2 5 dm-4 如果没有这个命令,需要安装sysstat 包. Usage: iostat [ options ] [ <interval> [ <cou ...
- 详解MongDB数据库
NoSQL 若杀死进程应使用pkill 数据设计模式:分布式.非关系型.不提供ACID 特性:简单数据模型.源数据和应用数据分离.弱一致性 优势: 避免不必要的复杂性 高吞吐量, 高 水平扩展能力和低 ...
- 201871010108-高文利《面向对象程序设计(java)》第六七周学习总结
项目 内容 这个作业属于哪个课程 <任课教师博客主页链接> https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 <作业链接地址> ht ...
- HDFS 分布式文件系统
博客出处W3c:https://www.w3cschool.cn/hadoop/xvmi1hd6.html 简介 Hadoop Distributed File System,分布式文件系统 架构 B ...
- Mybatis-Plus 代码生成器基本使用
Mybatis-Plus 代码生成器基本使用 参考 https://mp.baomidou.com/guide/generator.html#%E4%BD%BF%E7%94%A8%E6%95%99%E ...
- 每天一道Rust-LeetCode(2019-06-04)
每天一道Rust-LeetCode(2019-06-04) 最长回文子串 坚持每天一道题,刷题学习Rust. 原题 题目描述 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度 ...
- 为什么说要搞定微服务架构,先搞定RPC框架
今天开始聊一些微服务的实践,第一块,RPC框架的原理及实践,为什么说要搞定微服务架构,先搞定RPC框架呢? 一.需求缘起 服务化的一个好处就是,不限定服务的提供方使用什么技术选型,能够实现大公司跨团队 ...
- 0x01 Wechall writeup
目录 0x01 Wechall writeup Limited Access Training: Crypto - Caesar II Impossible n'est pas français Tr ...
- 知识点总结 REACT
1.react中如何创建一个组件 ES6:class 组件名 extends Component{} ES5:var App=React.createClass({}) 2.render函数什么时候会 ...
- Linux文件系统与日志
1.inode 包含文件的元信息(1)inode 内容:文件的字节数.拥有者的 UID.GID.文件的读写执行权限.时间戳等,但不包含文件名.文件名是储存在目录的目录项中.(2)查看文件的 inode ...