C# Lamda到底是什么?!

lamda作为匿名函数,现在已经能够出现子啊C#程序的任何可能位置,它可能作为参数为委托或其他函数复制,或者单独作为表达式,或者承担一些类似C++中内联函数的一些作用承担一些简单计算。熟练的使用Lamda表达式能够让减少代码的冗余,更快,更简洁实现功能。

lamda表达式可采用以下任何一种:

表达式lamda,表达式作为主题

表达式位于 => 运算符右侧的 lambda 表达式称为“表达式 lambda”。 表达式 lambda 会返回表达式的结果,并采用以下基本形式:

 (输入参数) => 表达式(input-parameter)=> expression

语句 lambda,语句块作为其主体

(输入参数)=>{语句列表}
(input-parameters) => { <sequence-of-statements> }

任何lamda都可以转换为委托。 如果 lambda 表达式不返回值,则可以将其转换为 Action 委托类型之一;否则,可将其转换为 Func 委托类型之一。

Action和Func两者最基本的区别是:前者适合那些需要带返回值的委托,后者适合那些不带返回值的委托。 Func 所引用的方法接收一个或者多个参数并带有一个返回值,Action所引用的方法接收一个或者多个参数并且没有返回值,换句话说,你的委托所引用的方法没有返回值,这时候适合用 Action。

ex:

private void Actionlamda() {Action<string> print = name => {Debug.Log(name);};print("Hello World");// Hello World
}private void Funclamda() {Func<int, int, int> func = (lhs, rhs) => {return lhs + rhs;};Debug.Log(func(1,1));// 2
}

lamda表达式的输入参数

使用空括号指定零个输入参数:

Action line = () => Console.WriteLine();

只有一个参数时可以省略括号

Func<double, double> cube = x => x * x * x;

当具有两个或两个以上的参数时,中间用逗号加以分割

Func<int, int, bool> testForEquality = (x, y) => x == y;

当编译器不能明确参数类型的时候可以显示指定参数类型

Func<int, string, bool> isTooLong = (int x, string s) => s.Length > x;

输入的参数必须全部是显示或者隐式的,否则会产生错误

从C#9.0开始,可以使用弃元指定lamda表达式中不使用的参数

Func<int, int, int> constant = (_, _) => 42;

为了向后兼容,如果只有一个输入参数命名为 ,则在 lambda 表达式中, 将被视为该参数的名称。

所以可以是下面的情况:

Func<int, int> func = (_) => _+19;

从C# 12.0开始lamda表达式参数支持默认值

var IncrementBy = (int source, int increment = 1) => source + increment;Console.WriteLine(IncrementBy(5)); // 6
Console.WriteLine(IncrementBy(5, 2)); // 7

支持params 修饰参数

var sum = (params int[] values) =>
{int sum = 0;foreach (var value in values) sum += value;return sum;
};var empty = sum();
Console.WriteLine(empty); // 0var sequence = new[] { 1, 2, 3, 4, 5 };
var total = sum(sequence);
Console.WriteLine(total); // 15

params 是可变参数,用于在不清楚参数数目是使用,被修饰的参数必须是数组。
** EX:**

namespace ConsoleApp1
{class Program{static void Main(){UseParams(1, 2, 3); //既可以用任意多个intint[] myarray = new int[3] { 10, 11, 12 };UseParams(myarray); //也可以是int一维数组  UseParams2(1, 'a', new object() );}public static void UseParams(params int[] list){for (int i = 0; i < list.Length; i++){Console.WriteLine(list[i]);}Console.WriteLine();}public static void UseParams2(params object[] list){for (int i = 0; i < list.Length; i++){Console.WriteLine(list[i]);}Console.WriteLine();}}
}

lamda表达式和元组

private void LamdaText() {Func<(int, int), (int, int)> func = _ => (_.Item1*2, _.Item2 * 2) ;var num = (1,2);Debug.Log(func(num));// (2.4)
}

除了使用C# 内置的Item1,Item2在元组中也可以使用参数名参与运算

private void LamdaText() {Func<(int n1, int n2), (int, int)> func = _ => (_.n1 * 2, _.n2 * 2);var num = (1, 2);Debug.Log(func(num));// (2.4)
}

含标椎查询语句的Lamda

Lamda可以结合Linq查询语句,快速得到想要的结果

public override List<NodeBase> CacheNeighbors()
{return Neighbor = GridManager.Instance.Tiles.Where(t => Coords.GetDistance(t.Value.Coords) == 1).Select(t => t.Value).ToList();
}

Count 标准查询运算符:

int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
int oddNumbers = numbers.Count(n => n % 2 == 1);
Console.WriteLine($"There are {oddNumbers} odd numbers in {string.Join(" ", numbers)}");

其中包含 numbers 数组中位于 9 之前的所有元素,因为这是序列中第一个不符合条件的数字:

int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
var firstNumbersLessThanSix = numbers.TakeWhile(n => n < 6);
Console.WriteLine(string.Join(" ", firstNumbersLessThanSix));
// Output:
// 5 4 1 3

下示例通过将输入参数括在括号中来指定多个输入参数。 此方法返回 numbers 数组中的所有元素,直至发现值小于其在数组中的序号位置的数字为止:

int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
var firstSmallNumbers = numbers.TakeWhile((n, index) => n >= index);
Console.WriteLine(string.Join(" ", firstSmallNumbers));
// Output:
// 5 4

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/38497.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Django图书商城系统实战开发-总结经验之后端开发

Django图书商城系统实战开发-总结经验之后端开发 简介 在这篇博客中&#xff0c;我将总结经验分享后端开发Django图书商城系统的过程。在开发过程中&#xff0c;我遇到了各种挑战和问题&#xff0c;并且通过实践获得了宝贵的经验和教训。通过本文&#xff0c;我希望能帮助读者…

vue3+vite配置vantUI主题

❓在项目中统一配置UI主题色&#xff0c;各个组件配色统一修改 vantUI按需安装 参考vantUI文档 创建vantVar.less文件夹进行样式编写 vantVar.less :root:root{//导航--van-nav-bar-height: 44px;//按钮--van-button-primary-color: #ffffff;--van-button-primary-backgr…

linux——mysql的高可用MHA

目录 一、概述 一、概念 二、组成 三、特点 四、工作原理 二、案例 三、构建MHA 一、基础环境 二、ssh免密登录 三、主从复制 master slave1 四、MHA安装 一、环境 二、安装node 三、安装manager 一、概述 一、概念 MHA&#xff08;MasterHigh Availability&a…

力扣 198. 打家劫舍

题目来源&#xff1a;https://leetcode.cn/problems/house-robber/description/ C题解&#xff1a;因为是间接偷窃&#xff0c;所以偷nums[i]家前&#xff0c;一定偷过第i-2或者i-3家&#xff0c;因为i-1不能偷。 例如12345共5家&#xff0c;先偷第1家&#xff0c;那么2不能偷…

(三)Unity开发Vision Pro——入门

3.入门 1.入门 本节涵盖了几个重要主题&#xff0c;可帮助您加快visionOS 平台开发速度。在这里&#xff0c;您将找到构建第一个 Unity PolySpatial XR 应用程序的分步指南的链接&#xff0c;以及 PolySpatial XR 开发时的一些开发最佳实践。 2.开发与迭代 有关先决条件、开…

显卡nvidia-smi后 提示Faild 解决过程,包含卸载重装NVIDIA驱动步骤

显卡异常: 显卡nvidia-smi后 提示Faild 解决过程&#xff0c;卸载重装nvidia驱动步骤 文章目录 显卡异常: 显卡nvidia-smi后 提示Faild 解决过程&#xff0c;卸载重装nvidia驱动步骤 [toc]1 缘由2 解决过程3 过程所需命令4 解决4.1 把该显卡重新拔插一下卸载NVIDIA驱动的方法&a…

单元测试优化:为什么要对程序进行测试?测试有什么好处?

单元测试&#xff08;Unit Testing&#xff09;又称为模块测试, 是针对程序模块&#xff08;软件设计的最小单位&#xff09;来进行正确性检验的测试工作。 程序单元是应用的最小可测试部件。简单来说&#xff0c;就是测试数据的稳定性是否达到程序的预期。 我们日常开发时可能…

19、SQL注入之SQLMAP绕过WAF

目录 逻辑层1、逻辑问题2、性能问题 白名单方式一&#xff1a;IP白名单方式二&#xff1a;静态资源方式三&#xff1a;url白名单方式四: 爬虫白名单 sqlmap在测试漏洞的时候&#xff0c;选择了no&#xff0c;它就不会去测试其它的了&#xff0c;我们一般选择yes&#xff0c;为了…

Deep Learning With Pytorch - 最基本的感知机、贯序模型/分类、拟合

文章目录 如何利用pytorch创建一个简单的网络模型&#xff1f;Step1. 感知机&#xff0c;多层感知机&#xff08;MLP&#xff09;的基本结构Step2. 超平面 ω T ⋅ x b 0 \omega^{T}xb0 ωT⋅xb0 or ω T ⋅ x b \omega^{T}xb ωT⋅xb感知机函数 Step3. 利用感知机进行决策…

SpringBoot整合Minio

SpringBoot整合Minio 在企业开发中&#xff0c;我们经常会使用到文件存储的业务&#xff0c;Minio就是一个不错的文件存储工具&#xff0c;下面我们来看看如何在SpringBoot中整合Minio POM pom文件指定SpringBoot项目所依赖的软件工具包 <?xml version"1.0" …

Ubuntu上安装RabbitMQ

在Ubuntu上安装RabbitMQ并设置管理员用户为"admin"&#xff0c;密码为"123456"&#xff0c;并开启开机自启 更新系统软件包列表。在终端中执行以下命令&#xff1a; sudo apt update安装RabbitMQ服务器软件包。运行以下命令&#xff1a; sudo apt insta…

DaVinci Resolve Studio 18 for Mac 达芬奇调色

DaVinci Resolve Studio 18是一款专业的视频编辑和调色软件&#xff0c;适用于电影、电视节目、广告等各种视觉媒体的制作。它具有完整的后期制作功能&#xff0c;包括剪辑、调色、特效、音频处理等。 以下是DaVinci Resolve Studio 18的主要特点&#xff1a; - 提供了全面的视…

Linux 设置 ssh 内网穿透

背景&#xff1a;有三台机器A、B、C&#xff0c;机器 A 位于某局域网内&#xff0c;能够连接到互联网。机器 B 有公网 IP&#xff0c;能被 A 访问到。机器 C 位于另外一个局域网内&#xff0c;能够连接到互联网&#xff0c;能够访问 B。 目标&#xff1a;以 B 为中介&#xff…

Jmeter-压测时接口按照顺序执行-临界部分控制器

文章目录 临界部分控制器存在问题 临界部分控制器 在进行压力测试时&#xff0c;需要按照顺序进行压测&#xff0c;比如按照接口1、接口2、接口3、接口4 进行执行 查询结果是很混乱的&#xff0c;如果请求次数少&#xff0c;可能会按照顺序执行&#xff0c;但是随着次数增加&a…

Python-OpenCV中的图像处理-模板匹配

Python-OpenCV中的图像处理-模板匹配 模板匹配单对象的模板匹配多对象的模板匹配 模板匹配 使用模板匹配可以在一幅图像中查找目标函数&#xff1a; cv2.matchTemplate()&#xff0c; cv2.minMaxLoc()模板匹配是用来在一副大图中搜寻查找模版图像位置的方法。 OpenCV 为我们提…

无线充电底座

<项目>无线充电器 前言 个人DIY的无线充电底座&#xff08;带磁吸&#xff09;&#xff0c;基于IP6829方案。 Drawn By:67373 硬件部分 3D模型 资料开源链接 https://github.com/linggan17/WirelessCharge

面试热题(每日温度)

请根据每日 气温 列表 temperatures &#xff0c;重新生成一个列表&#xff0c;要求其对应位置的输出为&#xff1a;要想观测到更高的气温&#xff0c;至少需要等待的天数。如果气温在这之后都不会升高&#xff0c;请在该位置用 0 来代替。 输入: temperatures [73,74,75,71,69…

SpringBoot + Mybatis多数据源

一、配置文件 spring: # datasource: # username: root # password: 123456 # url: jdbc:mysql://127.0.0.1:3306/jun01?characterEncodingutf-8&serverTimezoneUTC # driver-class-name: com.mysql.cj.jdbc.Driverdatasource:# 数据源1onedata:jdbc-url: j…

SCF金融公链新加坡启动会 链结创新驱动未来

新加坡迎来一场引人瞩目的金融科技盛会&#xff0c;SCF金融公链启动会于2023年8月13日盛大举行。这一受瞩目的活动将为金融科技领域注入新的活力&#xff0c;并为广大投资者、合作伙伴以及关注区块链发展的人士提供一个难得的交流平台。 在SCF金融公链启动会上&#xff0c; Wil…

CentOS7的journalctl日志查看方法

多台服务器间免密登录|免密拷贝 Cenos7 搭建Minio集群部署服务器(一) Cenos7 搭建Minio集群Nginx统一访问入口|反向动态代理(二) Spring Boot 与Minio整合实现文件上传与下载(三) CentOS7的journalctl日志查看方法 MySQL8.xx一主两从复制安装与配置 1、概述 日志管理工…