[c#菜鸟]lambda表达式
what
一、定义
Lambda 表达式是一种可用于创建 委托 或 表达式目录树 类型的 匿名函数 。通过使用 lambda 表达式,可以写入可作为参数传递或作为函数调用值返回的本地函数。(微软)
理解
1.Lambda表达式是一种匿名方法。
匿名方法可省略参数列表,Lambda表达式不能省略参数列表的圆括号()
//只需要使用一个delegate关键字,加上作为方法的操作使用的代码块。 Action printer = delegate { Console.WriteLine("Hello world"); }; printer();
//一个没有参数的方法,返回值的类型不用指定 系统会自动判断 () => Console.WriteLine()
二、发展
委托 → 匿名方法 → lambda表达式 → 泛型委托 → 表达式树
//委托分3步//step01:用delegate定义一个委托 public delegate int deleFun(int x,int y); //step02:声明一个方法来对应委托 public static int Add(int x, int y) {return x + y; } static void Main(string[] args) {//step03:用这个方法来实例化这个委托deleFun dFun = new deleFun(Add);Console.WriteLine(dFun.Invoke(5, 6)); }
//匿名方法分2步//step01:用delegate定义一个委托 public delegate int deleFun(int x,int y);static void Main(string[] args) {//step02:把一个方法赋值给委托deleFun dFun = delegate(int x, int y) { return x + y; };Console.WriteLine(dFun.Invoke(5, 6)); }
//lambda表达式简化了第2步//step01:用delegate定义一个委托 public delegate int deleFun(int x,int y);static void Main(string[] args) {//step02:把一个方法赋值给委托 deleFun dFun = (x, y) => {return x + y; };Console.WriteLine(dFun.Invoke(5, 6)); }
//泛型委托只需要1步static void Main(string[] args) {//step01:定义泛型委托 并把一个方法赋值给委托 Func<int, int, int> dFun = (x, y) => { return x + y; };Console.WriteLine(dFun.Invoke(5, 6)); }
说明
在 C# 2.0 中引入了泛型。现在我们能够编写泛型类、泛型方法和最重要的:泛型委托。尽管如此,直到 .NET 3.5,微软才意识到实际上仅通过两种泛型委托就可以满足 99% 的需求:
- Action :无输入参数,无返回值
- Action<T1, ..., T16> :支持1-16个输入参数,无返回值
- Func<T1, ..., T16, Tout> :支持1-16个输入参数,有返回值
//表达式树其实与委托已经没什么关系了,非要扯上关系,那就这么说吧,表达式树是存放委托的容器。//如果非要说的更专业一些,表达式树是存取Lambda表达式的一种数据结构。要用Lambda表达式的时候,直接从表达式中获取出来,Compile()就可以直接用了。static void Main(string[] args) { Expression<Func<int, int, int>> exp = (x, y) => x + y;Func<int, int, int> fun = exp.Compile();Console.WriteLine(fun.Invoke(5, 6)); }
when
1、列表迭代
List<int> numbers = new List<int>() { 1, 2, 3 };//一般用法 foreach (int i in numbers)Console.WriteLine(i);//使用lambda numbers.ForEach(i => Console.WriteLine(i));
2、linq 和lambda
//linq var students1 = from t in db.Studentswhere t.Name == "张三"select new { t.Id, t.Name, t.Age };//lambda var students2 = db.Students.Where(t => t.Name == "张三").Select(t => new { t.Id, t.Name, t.Age });
3、线程
4、多态和lambda
5、编写内联代码时
how
语法: 输入参数(如果有) => 表达式或语句块
例如:
x => x * x //指定名为 x 的参数并返回 x 的平方值
参考
1.Lambda表达式的前世今生
2.你知道C#中的Lambda表达式的演化过程吗?
3.用五分钟重温委托,匿名方法,Lambda,泛型委托,表达式树
4.方法组转换和匿名方法
转载于:https://www.cnblogs.com/code1992/p/9414032.html
[c#菜鸟]lambda表达式相关推荐
- lambda表达式python菜鸟教程_[c#菜鸟]lambda表达式
what 一.定义 Lambda 表达式是一种可用于创建 委托 或 表达式目录树 类型的 匿名函数 .通过使用 lambda 表达式,可以写入可作为参数传递或作为函数调用值返回的本地函数.(微软) 理 ...
- [深入学习C#]LINQ查询表达式详解(1)——基本语法、使用扩展方法和Lambda表达式简化LINQ查询
此文章非原创,转载自诗人江湖老,原文地址 在Git上下载源码 在工程中我们少不了要定义类或者结构去储存数据,这些数据将被临时地储存在内存中,现在我们想要对其完成一些类似于查找.过滤等等常见的任务的时候 ...
- 还看不懂同事的代码?Lambda 表达式、函数接口了解一下
本文经授权转载自微信公众号:未读代码 Java 8 早已经在2014 年 3月 18日发布,毫无疑问 Java 8 对 Java 来说绝对算得上是一次重大版本更新,它包含了十多项语言.库.工具.JVM ...
- Java8新特性学习_001_(Lambda表达式,函数式接口,方法引用,Stream类,Optional类)
目录 ■代码 ■代码运行结果 ■代码说明 ・44行:Stream的.foreach方法ー参数类型:函数式接口 ・82行:Interface中,default方法 ・92行 Stream的.max方 ...
- 0202年了,还没有用上Java函数式编程!!!——Lambda表达式
0202年了,还没有用上Java函数式编程!!!--Lambda表达式 函数式编程是什么 命令式编程(Imperative) 声明式编程(Declarative) 函数式编程(Functional) ...
- 深入理解Java Lambda表达式,匿名函数,闭包
前言 对于Lambda表达式一直是知其然不知其所以然,为了搞清楚什么是Lambda表达式,以及Lambda表达式的用法和作用,本文应运而生当做学习笔记分享出来,欢迎指正交流. 什么是Lambda 让我 ...
- Lambda 表达式基础理论与示例
Lambda 表达式基础理论与示例 Lambda 表达式,也可称为闭包,推动 Java 8 发布的最重要新特性. Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中). 使用 Lam ...
- lambda表达式树
一.定义: 表达式树又称为表达式目录树,以数据形式表示语言级代码.所有的数据都存储在树结构中,每个结点表示一个表达式(Expression). 二.要点: –Lambda表达式的参数类型可以忽略,因为 ...
- java 8 lambda reduce_JDK8新特性Lambda表达式体验
"Lambda 表达式"(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstra ...
最新文章
- bzoj 1468 Tree(点分治模板)
- tr闭包_嵌套函数及闭包
- 查询出各个学科的前3名的同学信息的Sql
- 数据之路 - Python爬虫 - PySpider框架
- matlab矩阵的表示和简单操作
- [软件更新]迅雷v5.9.8.1084发布
- 一篇文章读懂UI设计师与美工区别(附视频教程+学习线路图)
- css - 布局 - rem布局
- 检验二元分解是否为无损分解(非加性)
- 无法导入某些项目,因为它们已经存在于Eclipse中的工作区错误中
- ZZULIOJ 1196: 数星星(二)(结构体专题)
- MyBatis Generator生成代码的几种方式
- 毕业设计c语言课程设计,大学毕业设计论文-—c语言课程设计.doc
- 凉宫春日的忧郁第五章
- 大厂的安卓技术面试是酱紫的
- 机器学习、数据建模、数据挖掘分析 特征无量纲化的常见操作方法
- veracrypt取消加密卷_VeraCrypt如何创建文件型加密卷?保护文件资料安全
- 身体这些部位不舒服的时候,你知道意味着什么吗?
- 【Docker容器安装、配置、部署】
- java自定义一个数组类(封装多种方法)