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表达式相关推荐

  1. lambda表达式python菜鸟教程_[c#菜鸟]lambda表达式

    what 一.定义 Lambda 表达式是一种可用于创建 委托 或 表达式目录树 类型的 匿名函数 .通过使用 lambda 表达式,可以写入可作为参数传递或作为函数调用值返回的本地函数.(微软) 理 ...

  2. [深入学习C#]LINQ查询表达式详解(1)——基本语法、使用扩展方法和Lambda表达式简化LINQ查询

    此文章非原创,转载自诗人江湖老,原文地址 在Git上下载源码 在工程中我们少不了要定义类或者结构去储存数据,这些数据将被临时地储存在内存中,现在我们想要对其完成一些类似于查找.过滤等等常见的任务的时候 ...

  3. 还看不懂同事的代码?Lambda 表达式、函数接口了解一下

    本文经授权转载自微信公众号:未读代码 Java 8 早已经在2014 年 3月 18日发布,毫无疑问 Java 8 对 Java 来说绝对算得上是一次重大版本更新,它包含了十多项语言.库.工具.JVM ...

  4. Java8新特性学习_001_(Lambda表达式,函数式接口,方法引用,Stream类,Optional类)

    目录 ■代码 ■代码运行结果 ■代码说明 ・44行:Stream的.foreach方法ー参数类型:函数式接口 ・82行:Interface中,default方法 ・92行   Stream的.max方 ...

  5. 0202年了,还没有用上Java函数式编程!!!——Lambda表达式

    0202年了,还没有用上Java函数式编程!!!--Lambda表达式 函数式编程是什么 命令式编程(Imperative) 声明式编程(Declarative) 函数式编程(Functional) ...

  6. 深入理解Java Lambda表达式,匿名函数,闭包

    前言 对于Lambda表达式一直是知其然不知其所以然,为了搞清楚什么是Lambda表达式,以及Lambda表达式的用法和作用,本文应运而生当做学习笔记分享出来,欢迎指正交流. 什么是Lambda 让我 ...

  7. Lambda 表达式基础理论与示例

    Lambda 表达式基础理论与示例 Lambda 表达式,也可称为闭包,推动 Java 8 发布的最重要新特性. Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中). 使用 Lam ...

  8. lambda表达式树

    一.定义: 表达式树又称为表达式目录树,以数据形式表示语言级代码.所有的数据都存储在树结构中,每个结点表示一个表达式(Expression). 二.要点: –Lambda表达式的参数类型可以忽略,因为 ...

  9. java 8 lambda reduce_JDK8新特性Lambda表达式体验

    "Lambda 表达式"(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstra ...

最新文章

  1. bzoj 1468 Tree(点分治模板)
  2. tr闭包_嵌套函数及闭包
  3. 查询出各个学科的前3名的同学信息的Sql
  4. 数据之路 - Python爬虫 - PySpider框架
  5. matlab矩阵的表示和简单操作
  6. [软件更新]迅雷v5.9.8.1084发布
  7. 一篇文章读懂UI设计师与美工区别(附视频教程+学习线路图)
  8. css - 布局 - rem布局
  9. 检验二元分解是否为无损分解(非加性)
  10. 无法导入某些项目,因为它们已经存在于Eclipse中的工作区错误中
  11. ZZULIOJ 1196: 数星星(二)(结构体专题)
  12. MyBatis Generator生成代码的几种方式
  13. 毕业设计c语言课程设计,大学毕业设计论文-—c语言课程设计.doc
  14. 凉宫春日的忧郁第五章
  15. 大厂的安卓技术面试是酱紫的
  16. 机器学习、数据建模、数据挖掘分析 特征无量纲化的常见操作方法
  17. veracrypt取消加密卷_VeraCrypt如何创建文件型加密卷?保护文件资料安全
  18. 身体这些部位不舒服的时候,你知道意味着什么吗?
  19. 【Docker容器安装、配置、部署】
  20. java自定义一个数组类(封装多种方法)

热门文章

  1. TCP/IP学习笔记(九)TCP报文段首部格式
  2. 计算机专业多媒体技术学什么,计算机多媒体技术需要学习哪些知识
  3. python中items属性的用法
  4. OllyDbg的一些快捷键
  5. 【代码规范】google开源c\c++项目代码规范
  6. HTML <q> 标签的简单介绍
  7. string 类的初始化和赋值(程序成长之路的一颗米)
  8. linux终端刷新网络命令,在Ubuntu Linux操作系统中重新启动网络的方法
  9. c++11-Varadic Templates右值引用lamada
  10. Vitis学习记录(三)