C#开发-集合使用和技巧(二)Lambda 表达式介绍和应用
C#开发-集合使用和技巧
Lambda 表达式介绍和应用
- C#开发-集合使用和技巧
- 介绍
- 简单的示例:
- 集合查询示例:
- 1. 基本语法
- 从主体语句上区分:
- 1. 主体为单一表达式
- 2. 主体是代码块(多个表达式语句)
- 从参数上区分
- 1. 带输入参数的Lambda表达式
- 2. 不带输入参数的Lambda表达式
- 特殊用法:
- 2. 用法和示例
- 用法
- (1)LINQ 查询
- (2) 委托和事件处理
- 高级用法
- (1) 闭包
- 5. 总结
介绍
Lambda 表达式在 csharp 中是一种简洁的方式来表示匿名方法(也称为匿名函数)。Lambda 表达式的语法使用 =>
操作符,左侧是输入参数,右侧主体是表达式或代码块。
Lambda 表达式主要用于简化 LINQ 查询和事件处理代码,在开发过程中,可以很好的简化代码。
简单的示例:
我们给按钮加一个点击事件,我们需要先写一个点击的方法,然后+=给按钮添加事件
·
使用lambda表达式就可以一行搞定
public partial class Form1 : Form{int num = 0;public Form1(){InitializeComponent();button1.Click += Button1_Click;button1.Click += (sender, e) => num++;}private void Button1_Click(object sender, EventArgs e){num++;}}
集合查询示例:
在一个人员信息集合中找出所以性别为男的
如果要在一个集合,可以通过循环查找,这样需要循环+判断,然后将结果添加到新的集合中去
也可以使用Linq表达式实现,这样比第一种方法简单一点,但是也要写很长的代码
使用lambda表达式,一句话搞定。
以下是几种方法的完整的代码
List<Person> testList = new List<Person>{new Person{Id = 1,Name = "张三",City = "北京",Sex = "男"},new Person{Id = 2,Name = "李四",City = "上海",Sex = "女"},new Person{Id = 3,Name = "王五",City = "广州",Sex = "男"},new Person{Id = 4,Name = "赵六",City = "深圳",Sex = "女"},new Person{Id = 5,Name = "孙七",City = "杭州",Sex = "男"}};//方法一:循环查找var ResultList = new List<Person>();foreach (var item in testList){if (item.Sex == "男"){ResultList.Add(item);}}//方法二: Linq语句var ResultList2 = from item in testList where item.Sex == "男" select item;//方法三:lambdavar result3 = testList.Where(x => x.Sex == "男");
以下是 lambda 表达式的介绍和一些常见用法:
1. 基本语法
Lambda 表达式有不同的写法
从主体语句上区分:
1. 主体为单一表达式
(parameters) => expression
示例:
(x)=>x+1
x=>x+1
//上面两种效果一致,只有一个参数时,括号可以简写
//多个参数必须要写括号(x, y) => x + y
效果:
多个参数必须加括号,不然会报错
2. 主体是代码块(多个表达式语句)
如果右侧表达主体中有个多个语句,则需要{ }
包裹,主体就跟正常写函数一样
(parameters) => { statements }
示例:
(isOpen) =>
{if (isOpen){Console.WriteLine("打开");}else{Console.WriteLine("关闭");}
}
从参数上区分
1. 带输入参数的Lambda表达式
(input parameters) => expression
示例:
(x) => x * 2(x, y) => x + y
2. 不带输入参数的Lambda表达式
=> expression
示例:
() => { return 5; }
特殊用法:
有些情况,Lambda需要带参数,但是在右侧表达式主体中,又用不到参数,这时就可以使用 _来代替参数,表示
_ =>
是Lambda表达式的简写形式,其中 _
通常表示一个未使用的输入参数。
_ => expression
示例:
Action<int> action3 = _ =>{Console.WriteLine("执行了aciton");};button.Clicked += (_, _) => {// 不需要事件参数,直接执行代码DoSomething();
};
2. 用法和示例
用法
(1)LINQ 查询
Lambda 表达式在 LINQ 查询中广泛使用:
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
var evenNumbers = numbers.Where(n => n % 2 == 0).ToList();
在上面的代码中,n => n % 2 == 0
是一个 lambda 表达式,用于筛选出所有偶数。
(2) 委托和事件处理
Lambda 表达式也可以用于定义委托和事件处理程序:
public delegate int MathOperation(int x, int y);MathOperation multiply = (x, y) => x * y;
int product = multiply(3, 4); // product = 12// 事件处理
button.Click += (sender, e) => { Console.WriteLine("Button clicked!"); };
高级用法
(1) 闭包
Lambda 表达式可以捕获并使用它们作用域中的变量:
int multiplier = 3;
Func<int, int> multiplyBy = x => x * multiplier;
int result = multiplyBy(5); // result = 15
在这个例子中,Lambda 表达式 x => x * multiplier
捕获了外部变量 multiplier
。
5. 总结
Lambda 表达式是 C# 中强大的功能特性,用于简化代码、提高可读性,特别是在 LINQ 查询和事件处理方面。它们的语法简单而灵活,能很好地提高代码的简洁性和可维护性。
特别是在后续一些集合操作中,基本都要用到Lambda 表达式,掌握好Lambda 表达式,可以很好的提高编程效率。
相关文章:
C#开发-集合使用和技巧(二)Lambda 表达式介绍和应用
C#开发-集合使用和技巧 Lambda 表达式介绍和应用 C#开发-集合使用和技巧介绍简单的示例:集合查询示例: 1. 基本语法从主体语句上区分:1. 主体为单一表达式2. 主体是代码块(多个表达式语句) 从参数上区分1. 带输入参数的…...
Qt底层原理:深入解析QWidget的绘制技术细节(2)
(本文续上一篇《Qt底层原理:深入解析QWidget的绘制技术细节(1)》) QWidget绘制体系为什么这么设计【重点】 在传统的C图形界面框架中,例如DUILib等,控件的绘制逻辑往往直接在控件的类的内部,例如PushButt…...
【Gradio】表格数据科学与图表-连接到数据库
简介 本指南解释了如何使用 Gradio 将您的应用程序连接到数据库。我们将连接到托管在 AWS 上的 PostgreSQL 数据库,但 gradio 对您连接到的数据库类型及其托管位置完全不可知。因此,只要您能够编写 Python 代码来连接到您的数据,您就可以使用…...
艾多美用“艾”为生命加油,献血活动回顾
用艾为生命加油 6月10日~16日,艾多美中国开启献血周活动,已经陆续收到来自烟台总部、山东、广东、河南、四川、重庆、贵阳,乌鲁木齐,吉林,等地区的艾多美员工、会员、经销商发来的爱心助力,截止到目前&…...
人工智能在气象预报领域的崛起:GraphCast引领新纪元
最近,谷歌推出的天气预测大模型GraphCast在全球范围内引起了广泛关注,其卓越的表现不仅刷新了人们对AI能力的认知,更预示着传统天气预报工作模式的深刻变革。 GraphCast是一款基于机器学习技术的天气预测工具,它通过深度学习和大数…...
http和https的区别在哪
HTTP(超文本传输协议)和HTTPS(超文本传输安全协议)之间存在几个关键区别主要涉及安全性、端口、成本、加密方式、搜索引擎优化(SEO)、身份验证等方面 1、安全性:HTTP(超文本传输协议…...
windows10远程桌面端口,Windows 10远程桌面端口修改的两个方法
在Windows 10系统中,远程桌面功能允许用户通过网络从一台计算机远程访问和控制另一台计算机。默认情况下,远程桌面服务使用的端口是3389。然而,出于安全考虑,许多管理员和用户希望修改这一默认端口。本指南将详细介绍如何在Window…...
力扣1504.统计全1子矩形
力扣1504.统计全1子矩形 开一个二维数组存每个点从它本身开始向左有多少连续的1 遍历矩形右下角(i,j) 再遍历行k in i每一行的矩形数量 minx min(minx,left(k,j)) class Solution {public:int numSubmat(vector<vector<int>>& mat) {int n mat.size();int…...
vue3高德地图组件化,解决复用地图组件时渲染失败问题
思路:多个页面都需要调用地图,将地图封装成一个组件进行复用,发现调用时只有第一次渲染成功了。 解决:相同 id 的地图渲染只能有一次,如果多个复用地图的页面不需要同时渲染,使用 v-if 来控制;…...
Langchain 如何工作
How does LangChain work? LangChain是如何工作的? Let’s consider our initial example where we upload the US Constitution PDF and pose questions to it. In this scenario, LangChain compiles the data from the PDF and organizes it. 让我们考虑我们最初的例子…...
【数据结构】顺序表实操——通讯录项目
Hi~!这里是奋斗的小羊,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~ 💥💥个人主页:奋斗的小羊 💥💥所属专栏:C语言 🚀本系列文章为个人学习…...
C++继承与多态—多重继承的那些坑该怎么填
课程总目录 文章目录 一、虚基类和虚继承二、菱形继承的问题 一、虚基类和虚继承 虚基类:被虚继承的类,就称为虚基类 virtual作用: virtual修饰成员方法是虚函数可以修饰继承方式,是虚继承,被虚继承的类就称为虚基类…...
论文阅读:基于谱分析的全新早停策略
来自JMLR的一篇论文,https://www.jmlr.org/papers/volume24/21-1441/21-1441.pdf 这篇文章试图通过分析模型权重矩阵的频谱来解释模型,并在此基础上提出了一种用于早停的频谱标准。 1,分类难度对权重矩阵谱的影响 1.1 相关研究 在最近针对…...
1.接口测试-postman学习
目录 1.接口相关概念2.接口测试流程3.postman基本使用-创建请求(1)环境(2)新建项目集合Collections(3)新建collection(4)新建模块(5)构建请求请求URLheader设…...
2024年码蹄杯本科院校赛道初赛(省赛)
赛时所写题,简单写一下思路,qwq 第一题: 输出严格次小值, //#pragma GCC optimize(2)#include <iostream> #include <cstring> #include <algorithm> #include <vector> #include <queue> #incl…...
PHP蜜语翻译器在线文字转码解码源码
源码介绍 PHP蜜语翻译器在线文字转码解码源码 文字加密通话、一键转换、蜜语密码 无需数据库,可以将文字、字母、数字、代码、表情、标点符号等内容转换成新的文字形式,通过简单的文字以不同的排列顺序来表达不同的内容!支持在线加密解密 有多种加密展示…...
安卓浏览器区分启动、打开、分享
搞了几个钟头,终于全兼容了,分享有2种类型! void getDataFromIntent(Intent intent) {if (intent.getAction().equals(Intent.ACTION_VIEW)) {urln intent.getDataString();if (urln ! null) {if (urln.contains("\n"))urln url…...
C/C++ 数组负数下标
一 概述 在 C 中,数组是一块连续的内存空间,数组的下标通常用来定位这段内存中的特定元素。下标通常从 0 开始,最大到数组长度减 1。例如,一个有 10 个元素的数组,其有效下标范围是从 0 到 9。 当你尝试使用负数下标来…...
钓鱼网站开发原理(社会工程学)
钓鱼网站开发原理(社会工程学) 一、课程简介1、课程大纲2、课程目标3、知识储备 二、钓鱼网站简介1、什么是钓鱼网站2、开发&原理 三、PHP环境搭建1、简介2、自动安装MySQL/apache/PHP3、安装navicat 四、PDO表单入库案例1、语法2、显示登录表单3、入…...
如何优雅地使用 console.log 打印数组或对象
一、背景 使用 console.log 在控制台中打印数组或者对象时,很多时候它们的字段都是默认关闭的,需要手动一个个的点开,非常不直观且麻烦。 二、解决方案 使用 JSON.stringify() 的第三个参数 我们来看一下官方对于 JSON.stringify 的介绍 三、…...
模式分解的概念(下)-无损连接分解的与保持函数依赖分解的定义和判断、损失分解
一、无损连接分解 1、定义 2、检验一个分解是否是无损连接分解的算法 输入与输出 输入: 关系模式R(U,F),F是最小函数依赖集 R上的一个分解 输出: 判断分解是否为无损连接分解 (1&#x…...
vue3父组件获取子组件的实例对象
一,ref 在父组件的模板里,对子组件的标签定义ref属性,并且设置属性值,在方法里获取ref()获取实例对象。 父组件: <template><div ><div>我是父组件</div><<SonCom ref"sonComRe…...
主流框架选择:React、Angular、Vue的详细比较
目前前端小伙伴经常使用三种广泛使用的开发框架:React、Angular、Vue - 来设计网站 Reactjs:效率和多功能性而闻名 Angularjs:创建复杂的应用程序提供了完整的解决方案,紧凑且易于使用的框架 Vuejs:注重灵活性和可重用…...
交易者的意义是什么?
按照阿德勒的说法:人生的意义就是为社会创造价值,推动整个人类社会的发展进步。 我认同且秉持这种观点。 而在交易中,你是否直接或者间接为社会做贡献了呢?这个还真不好说。 但是做为职业交易者,你的存在价值&#…...
io_uring
转:[译] Linux 异步 I_O 框架 io_uring:基本原理、程序示例与性能压测(2020) 新一代异步IO框架 io_uring | 得物技术 干翻 nio ,王炸 io_uring 来了 !!(图解史上最全&a…...
构建高并发Web应用:基于Gunicorn、Flask和Docker的部署指南
目录 一 理解基础组件 什么是Flask? 什么是Gunicorn? 什么是Docker? 二 环境准备 三 构建Flask应用 创建项目结构 编写Flask应用 app/views.py 四 使用Gunicorn部署Flask应用 配置Gunicorn Gunicorn配置文件 五 使用Docker进行容器化部署 编写Dockerfile 构建…...
【Ruby简单脚本02】双色球系统
# frozen_string_literal: true require date # 生成中奖号码的工具 # 红球 1-32 篮球 1-15 def create_num nums [] 6.times do while true num rand(1..32) unless nums.include?(num) nums << num break end end end blue rand(1..15) nums…...
Netty ByteBuf 使用详解
文章目录 1.概述2. ByteBuf 分类3. 代码实例3.1 常用方法3.1.1 创建ByteBuf3.1.2 写入字节3.1.3 扩容3.1.2.1 扩容实例3.1.2.2 扩容计算新容量代码 3.1.4 读取字节3.1.5 标记回退3.1.6 slice3.1.7 duplicate3.1.8 CompositeByteBuf3.1.9 retain & release3.1.9.1 retain &a…...
怎样去掉卷子上的答案并打印
当面对试卷答案的问题时,一个高效而简单的方法是利用图片编辑软件中的“消除笔”功能。这种方法要求我们首先将试卷拍摄成照片,然后利用该功能轻松擦除答案。尽管这一方法可能需要些许时间和耐心,但它确实为我们提供了一个可行的解决途径。 然…...
海思SS928/SD3403开发笔记1——使用串口调试开发板
该板子使用串口可以调试,下面是win11 调试 该板子步骤 1、给板子接入鼠标、键盘、usb转串口 2、下载SecureCRT,并科学使用 下载地址: 链接:https://pan.baidu.com/s/11dIkZVstvHQUhE8uS1YO0Q 提取码:vinv 3、安装c…...
一级a做爰片免费网站孕交视频教程/2023年8月新闻热点事件
numpy模块中的矩阵对象为numpy.matrix,包括矩阵数据的处理,矩阵的计算,以及基本的统计功能,转置,可逆性等等,包括对复数的处理,均在matrix对象中。 class numpy.matrix(data,dtype,copy):返回一…...
seo网站优化推广怎么做/安顺seo
上篇我们从理论上了解了什么是工厂方法模式,也知道了创建者类和产品类的主要作用是什么。更重要的是,我们还学到了一个设计原则依赖倒置原则,这个原则能推导出我们为什么会使用工厂模式。 当然啦,上次还留下几个指导方针帮助我们…...
伪原创网站/汽车推广软文
大家好,我是锋哥,今天一个老朋友找我聊聊天,说最近几年事业稳定,准备换个50万的车。 我推荐他黑色奔驰GLC 300 这个学员比我厉害,我现在开的还是小英朗,还是手动的,哈哈!不过等过几…...
企业做网站认证有哪些好处/长沙关键词优化推荐
前提: 数仓中的维度,事实表技术提倡用代理键代替实体键,下面我们讲解下代理键的概念,以及Hive中如何生成代理键 (自增列) 代理键 : 维度表中必须有一个能够唯一标识一行记录的列,通过该列维护维度表与事实表…...
南京铁路建设网站/推广普通话手抄报模板
1. 命令行方式 前言介绍: 要知道一个表占用空间的大小,那就相当于是 数据大小 索引大小 即可。 show databases; (查看有多少 database, 也叫做table schema; 有点串用) 1.1 查看单个database(或是table schema)占用的大小 select sum(DATA_LENGTH)sum(INDEX_LENG…...
wordpress替换头像/个人主页网页设计
Linux Mint 19.2 “Tina” 在 2019 年 8 月 2 日发布,它是一个基于 Ubuntu 18.04 LTS (Bionic Beaver) 的长期支持版本。-- 2daygeek(作者)Linux Mint 19.2 “Tina” 在 2019 年 8 月 2 日发布,它是一个基于 Ubuntu 18.04 LTS (Bi…...