Lambda表达式的前世今生(生动详细得我自己都被感动了)

2023-10-07 21:01

本文主要是介绍Lambda表达式的前世今生(生动详细得我自己都被感动了),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Lambda表达式的形成

  • Lambda这个小宝宝出生之前,大家为了把委托或事件写得简洁优雅(其实就是想偷懒),采用了匿名表达式。
  • 可是,在实际使用过程中,大家还想再继续偷点懒,于是就绞尽脑汁地想把匿名表达式不断简化。
  • 所以,Lambda表达式的使用前提是:在委托或事件中使用,单独拎出来使用是会报错的。
  • 首先,我们通过匿名方法,来写一个委托。
delegate int MyDel(int x);
void main(string[] args){MyDel mc += delegate(int x) {return x};
}
  • 因为C#编译器能对返回值类型做出自动判断,mc的值可以被自动识别为MyDel,所以,MyDel这个类型可以直接省略不写,于是代码就被简化成了这样。
delegate int MyDel(int x);
void main(string[] args){mc += delegate(int x) {return x};
}
  • 然而,delegate这个关键字那么长,写起来好麻烦啊,但又不能不写(要用它标明这是委托类型),于是,人们就想着,用=>来代替delegate关键字,读作goes to。
delegate int MyDel(int x);
void main(string[] args){mc += (int x) => {return x};
}
  • 这时候,大家在想,既然我在定义委托类型的时候,已经写了参数类型,那我在写匿名函数的时候,再写一遍参数类型不就重复了吗?于是再省略一点,就出现了Lambda表达式的基础形态,后续的Lambda表达式在此基础上,出现各种演变。
delegate int MyDel(int x);
void main(string[] args){mc += (x) => {return x};
}

有参无返回值

Action<string> action = msg => Console.WriteLine(msg);
action("")

有参有返回值

Func<int, int> func = (x) =>{return x + 100;};
int result = func(900);
  • 对于只有一个参数的方法体,可以省略括号;对于只有一行语句的方法体,可以省略大括号和return。
  • 于是,进一步简化。
Func<int, int> func = x => x + 100;
int result = func(900);

Lambda作为参数

  • 这是非常装B的写法。
int[] arr = { 1, 2, 3, 4, 5, 6, 7 };
// Count其实是一个委托,统计满足条件体的元素个数
Console.WriteLine($"数组中有{arr.Count(x => x % 2 == 1)}个奇数");

这篇关于Lambda表达式的前世今生(生动详细得我自己都被感动了)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/160422

相关文章

Python pandas库自学超详细教程

《Pythonpandas库自学超详细教程》文章介绍了Pandas库的基本功能、安装方法及核心操作,涵盖数据导入(CSV/Excel等)、数据结构(Series、DataFrame)、数据清洗、转换... 目录一、什么是Pandas库(1)、Pandas 应用(2)、Pandas 功能(3)、数据结构二、安

Apache Ignite 与 Spring Boot 集成详细指南

《ApacheIgnite与SpringBoot集成详细指南》ApacheIgnite官方指南详解如何通过SpringBootStarter扩展实现自动配置,支持厚/轻客户端模式,简化Ign... 目录 一、背景:为什么需要这个集成? 二、两种集成方式(对应两种客户端模型) 三、方式一:自动配置 Thick

C++11右值引用与Lambda表达式的使用

《C++11右值引用与Lambda表达式的使用》C++11引入右值引用,实现移动语义提升性能,支持资源转移与完美转发;同时引入Lambda表达式,简化匿名函数定义,通过捕获列表和参数列表灵活处理变量... 目录C++11新特性右值引用和移动语义左值 / 右值常见的左值和右值移动语义移动构造函数移动复制运算符

Python对接支付宝支付之使用AliPay实现的详细操作指南

《Python对接支付宝支付之使用AliPay实现的详细操作指南》支付宝没有提供PythonSDK,但是强大的github就有提供python-alipay-sdk,封装里很多复杂操作,使用这个我们就... 目录一、引言二、准备工作2.1 支付宝开放平台入驻与应用创建2.2 密钥生成与配置2.3 安装ali

2025版mysql8.0.41 winx64 手动安装详细教程

《2025版mysql8.0.41winx64手动安装详细教程》本文指导Windows系统下MySQL安装配置,包含解压、设置环境变量、my.ini配置、初始化密码获取、服务安装与手动启动等步骤,... 目录一、下载安装包二、配置环境变量三、安装配置四、启动 mysql 服务,修改密码一、下载安装包安装地

在macOS上安装jenv管理JDK版本的详细步骤

《在macOS上安装jenv管理JDK版本的详细步骤》jEnv是一个命令行工具,正如它的官网所宣称的那样,它是来让你忘记怎么配置JAVA_HOME环境变量的神队友,:本文主要介绍在macOS上安装... 目录前言安装 jenv添加 JDK 版本到 jenv切换 JDK 版本总结前言China编程在开发 Java

Spring Boot Actuator应用监控与管理的详细步骤

《SpringBootActuator应用监控与管理的详细步骤》SpringBootActuator是SpringBoot的监控工具,提供健康检查、性能指标、日志管理等核心功能,支持自定义和扩展端... 目录一、 Spring Boot Actuator 概述二、 集成 Spring Boot Actuat

如何在Java Spring实现异步执行(详细篇)

《如何在JavaSpring实现异步执行(详细篇)》Spring框架通过@Async、Executor等实现异步执行,提升系统性能与响应速度,支持自定义线程池管理并发,本文给大家介绍如何在Sprin... 目录前言1. 使用 @Async 实现异步执行1.1 启用异步执行支持1.2 创建异步方法1.3 调用

Spring Boot 与微服务入门实战详细总结

《SpringBoot与微服务入门实战详细总结》本文讲解SpringBoot框架的核心特性如快速构建、自动配置、零XML与微服务架构的定义、演进及优缺点,涵盖开发环境准备和HelloWorld实战... 目录一、Spring Boot 核心概述二、微服务架构详解1. 微服务的定义与演进2. 微服务的优缺点三

SpringBoot改造MCP服务器的详细说明(StreamableHTTP 类型)

《SpringBoot改造MCP服务器的详细说明(StreamableHTTP类型)》本文介绍了SpringBoot如何实现MCPStreamableHTTP服务器,并且使用CherryStudio... 目录SpringBoot改造MCP服务器(StreamableHTTP)1 项目说明2 使用说明2.1