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 表达式,可以很好的提高编程效率。

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

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

相关文章

【数据结构初阶】 --- 单链表

关于链表你应该先了解这些 下图描述了物理模型和逻辑模型&#xff0c;大多数常见的其实是逻辑模型&#xff0c;但这对初学者或者掌握不扎实的同学不太友好&#xff0c;所以这里我重点讲解物理模型&#xff0c;当了解了这些细节&#xff0c;以后做题或是什么就直接画逻辑模型就…

Java优雅统计耗时【工具类】

任务耗时如何优雅的打印&#xff0c;看完本文你就明白了&#xff01;~ import cn.hutool.core.date.StopWatch; import cn.hutool.core.lang.Console;/*** 优雅打印出任务耗时*/ public class Main {public static void main(String[] args) throws Exception{StopWatch stopW…

macOS Sequoia 开发者测试版下载和安装教程

macOS Sequoia 于 2024年6月10日在WWDC 2024 上发布&#xff0c;里面添加了AI、窗口排列、操控iPhone等功能&#xff0c;目前发布的为测试版本&#xff0c;可能很多人不知道怎么去下载安装&#xff0c;现在小编教一下大家怎么安装最新的 macOS Sequoia 开发者测试版。 下载 mac…

2024 年最新使用 Node 搭建QQ开放平台官方 QQ 频道机器人详细教程(更新中)

注册 QQ 开放平台账号 QQ 开放平台是腾讯应用综合开放类平台&#xff0c;包含 QQ 机器人、QQ 小程序、QQ 小游戏 等集成化管理&#xff0c;也就是说你注册了QQ 开放平台&#xff0c;你开发 QQ 机器人还是 QQ 小程序都是在这个平台进行部署上线和管理。 如何注册 QQ 开放平台账…

JAVAEE值之网络原理(1)_用户数据报协议(UDP)、概念、特点、结构、代码实例

前言 在前两节中我们介绍了UDP数据报套接字编程&#xff0c;但是并没有对UDP进行详细介绍&#xff0c;本节中我们将会详细介绍传输层中的UDP协议。 一、什么是UDP&#xff1f; UDP工作在传输层&#xff0c;用于程序之间传输数据的。数据一般包含&#xff1a;文件类型&#xff0…

超图制作栅格数据集专题图示例

之前写过一两篇专题图的博文&#xff0c;是制作的矢量数据集的专题图&#xff1b; 有一个栅格数据集如下&#xff0c;不知是干嘛的&#xff0c;可能是一个地形&#xff0c;或水系&#xff1b; 看一下对栅格数据集制作专题图&#xff1b;能制作的专题图类型少些&#xff0c; 先…

R 文件优化插件:Binary XML file in layout Error inflating class

场景一&#xff1a;构造函数缺失 问题 自定义布局&#xff08;FlagmentLayout&#xff09;加载自定义属性失败&#xff0c;导致广告显示异常&#xff0c;甚至是闪退&#xff5e; InflateException 在 Android 中我们遇到的通常发生在自定义 View 创建中&#xff0c;动态加载…

探索交互设计:五大关键维度全面剖析

交互式设计是用户体验&#xff08;UX&#xff09;设计的重要组成部分。在本文中&#xff0c;我将向大家解释什么是交互设计并简要描述交互设计师通常每天都做什么。 一、什么是交互设计 交互式设计用简单的术语来理解就是用户和产品之间的交互。在大多数情况下&#xff0c;当…

大白菜PE系统进入时一直 ACPI_BIOS_ERROR

安装系统PE不支持&#xff0c;主板不兼容&#xff0c;换个WIN10的PE就解决了&#xff0c;跟之前部分电脑需要WIN8的PE同理 WIN10PE教程 WIN8PE教程

CLIPSeg

作者回答问题敷衍&#xff0c;不建议复现

谷歌Google广告开户要提供什么材料?

谷歌Google广告是企业出海&#xff0c;触及全球潜在客户的必备渠道&#xff0c;无论您是初创公司还是成熟企业&#xff0c;想要在激烈的市场竞争中脱颖而出&#xff0c;有效利用谷歌广告的力量至关重要。云衔科技&#xff0c;作为数字化营销解决方案与SaaS软件服务商&#xff0…

【Tkinter界面】Canvas 图形绘制(02/5)

文章目录 一、说明二、几何时使用 Canvas 组件2.1 用法2.2 简单范例2.3 对象移动2.4 对象删除2.5 文字对象显示 三、画布和画布对象3.1 画布生成函数原型3.2 使用create_xxx()方法3.3 对参数**options的解释 一、说明 Canvas&#xff08;画布&#xff09;组件为 Tkinter 的图形…

多类型图像OCR:基于Dify的多模态Agent实现

大模型相关目录 大模型&#xff0c;包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容 从0起步&#xff0c;扬帆起航。 大模型应用向开发路径&#xff1a;AI代理工作流大模型应用开发实用开源项目汇总大模…

记录一下PHP使用微信小程序支付

记录一下PHP使用微信小程序支付V3版本经历 官方文档&#xff1a;https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_8_0.shtml 请详细查看文档中小程序支付接入前准备&#xff08;https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_8_1.shtml&#xff…

仿element-ui 实现自己组件库 <3>

目录 input 组件封装 v-model用在组件上 显示和隐藏密码 封装switch组件 实现转换的功能 设置checkbox input 组件封装 首先input组件的基本框架和样式&#xff1a; <div class"miao-input"><input class"miao-input_inner" > </div…

网络编程(四)

一、使用wireshark抓包分析协议头 &#xff08;一&#xff09;wireshark常用的过滤语句 tcp.port <想要查看的端口号> ip.src <想要查看的源IP地址> ip.dest <想要查看的目的IP地址> ip.addr <想要查看的IP地址>&#xff08;二&#xff09;抓包分…

Burp Suite Professional 2024.5 (macOS, Linux, Windows) - Web 应用安全、测试和扫描

Burp Suite Professional 2024.5 (macOS, Linux, Windows) - Web 应用安全、测试和扫描 Burp Suite Professional, Test, find, and exploit vulnerabilities. 请访问原文链接&#xff1a;Burp Suite Professional 2024.5 (macOS, Linux, Windows) - Web 应用安全、测试和扫描…

IP服务器代理如何设置使用?

IP服务器代理&#xff08;通常称为代理IP或代理服务器&#xff09;的设置和使用方法可以根据不同的需求和场景而有所不同。以下是一个清晰的步骤指南&#xff0c;帮助你设置和使用IP服务器代理&#xff1a; 1. 选择合适的代理IP类型 根据使用目的的不同&#xff0c;可以选择不…

如何将ai集成到项目中,方法二

上一篇文章&#xff1a;如何将ai集成到radsystems项目中&#xff0c;在项目中引入ai-CSDN博客 上一篇文章内容主要针对于未实现权限分离的项目&#xff0c;这篇文章主要来说一下权限分离的项目怎么做&#xff0c;以及注意的细节。 一、编写前端router.js 二、编写前端askai.vu…

基础-02-数据通信基础

文章目录 1.信道特征1.1 数据通信概念1.2 信道特性-信道带宽W1.3 信道特性-码元和码元速率1.4 信道特性-奈奎斯特定理1.5 信道特性-香农定理1.6 带宽/码元速率/数据速率关系梳理1.7 练习题 2.信道延迟2.1 信道延迟概念2.2 信道延迟计算2.3 练习题 3. 传输介质3.1 传输介质概念3…