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;

 //方法三:lambda
 var 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 表达式,可以很好的提高编程效率。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【odoo | XML-RPC】odoo外部API解读,实现跨系统间的通讯!

概要 文章注意对官方的XML-RPC进行解读实操&#xff0c;以python为例&#xff0c;给大家介绍其使用方式和调用方法。 内容 什么是odoo的外部API? Odoo 的外部 API 是一种允许外部应用程序与 Odoo 实例进行交互的接口。通过 API&#xff0c;可以执行各种操作&#xff0c;例如…

移动端超超超详细知识点总结(Part3)

flex布局体验 1. 传统布局与flex布局 传统布局&#xff1a; 兼容性好布局繁琐局限性&#xff0c;不能再移动端很好的布局flex 弹性布局&#xff1a; 操作方便&#xff0c;布局极为简单&#xff0c;移动端应用很广泛PC 端浏览器支持情况较差IE 11或更低版本&#xff0c;不支持…

宝藏速成秘籍(7)堆排序法

一、前言 1.1、概念 堆排序&#xff08;Heapsort&#xff09;是指利用堆这种数据结构所设计的一种排序算法 。堆是一个近似 完全二叉树 的结构&#xff0c;并同时满足堆积的性质&#xff1a;即子结点的键值或索引总是小于&#xff08;或者大于&#xff09;它的父节点。 1.2、排…

Uni-App中的u-datetime-picker时间选择器Demo

目录 前言Demo 前言 对于网页端的推荐阅读&#xff1a;【ElementUI】详细分析DatePicker 日期选择器 事情起因是两个时间选择器同步了&#xff0c;本身是从后端慢慢步入全栈&#xff0c;对此将这个知识点从实战进行提炼 通过Demo进行总结 Demo 用于选择日期和时间的组件&a…

zookeeper介绍 和 编译踩坑

zookeeper 分布式协调服务 ZooKeeper原理及介绍 - 鹿泉 - 博客园 Zookeeper是在分布式环境中应用非常广泛&#xff0c;它的优秀功能很多&#xff0c;比如分布式环境中全局命名服务&#xff0c;服务注册中心&#xff0c;全局分布式锁等等。 本项目使用其分布式服务配置中心&am…

Java--数组的使用

1.普通For循环&#xff08;用的最多&#xff0c;需从中取出数据以及下标&#xff09; eg&#xff1a;图中三类问题都可 2.For-each循环&#xff08;一般用来打印一些结果&#xff09; eg&#xff1a;打印数组的具体元素 3.数组作方法入参&#xff08;对数组进行一些操作&#x…

【实例分享】银河麒麟高级服务器操作系统环境资源占用异常-情况分析及处理方法

1.情况描述 使用vsftp进行文件传输&#xff0c;发现sshd进程cpu占用异常&#xff0c;并且su和ssh登录相比正常机器会慢2秒左右。 图&#xff11; 2.问题分析 通过strace跟踪su和sshd进程&#xff0c;有大量ssh:notty信息。 图2 配置ssh绕过pam模块认证后&#xff0c;ssh连接速…

外观模式(大话设计模式)C/C++版本

外观模式 C #include <iostream> using namespace std;class stock1 { public:void Sell(){cout << "股票1卖出" << endl;}void Buy(){cout << "股票1买入" << endl;} };class stock2 { public:void Sell(){cout <<…

C++设计模式——Decorator装饰器模式

一&#xff0c;装饰器模式简介 装饰器模式是一种结构型设计模式&#xff0c; 它允许在不改变现有对象的情况下&#xff0c;动态地将功能添加到对象中。 装饰器模式是通过创建具有新行为的对象来实现的&#xff0c;这些对象将原始对象进行了包装。 装饰器模式遵循开放/关闭原…

AI办公自动化:批量在多个Word文档中插入对应图片

工作任务&#xff1a;文件夹中有多个word文档和word文档名称一致的图片&#xff0c;要把这些图片都插入到word文档中 在chatpgt中输入提示词&#xff1a; 你是一个Python编程专家&#xff0c;写一个Python脚本&#xff0c;具体步骤如下&#xff1a; 打开文件夹&#xff1a;F:…

c++/c输出double问题

这个我大抵能理解&#xff0c;%d是int嘛。 这是为啥&#xff1f; 这样又好了&#xff1f; 这我也能理解 这也可以 这也对&#xff1f; &#xff08;我知道我呢个函数为什么不对了&#xff0c;我的函数写的是int(&#xff09;) 附&#xff1a;保留几位小数&#xff1a; %.2f

手把手教你入门vue+springboot开发(三)--登录功能后端

文章目录 前言一、redis安装二、后端代码1.修改application.yml文件2.增加utils文件3.增加Result类4.修改UserController类5.修改UserMapper类6.修改UserService和UserServiceImpl类7.增加LoginInterceptor类8.增加WebConfig类9.修改pom.xml文件 前言 前两篇我们用vuespringbo…

基于负相关误差函数的4集成BP神经网络matlab建模与仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 MATLAB2022a 3.部分核心程序 ...............................................................…

XILINX 7系列XDMA使用_IP核介绍以及工程搭建

文章目录 一、XDMA IP核1.1、接口说明1.2、配置页说明 二、XDMA工程搭建2.1、BD搭建2.2 Linux下XDMA驱动安装2.3 Linux下使用XDMA进行数据传输 一、XDMA IP核 1.1、接口说明 sys_clk&#xff1a;主机给PCIE提供的时钟信号&#xff0c;通过原理图查看 sys_rst_n&#xff1a;主机…

宠物健康顾问系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;顾问管理&#xff0c;用户管理&#xff0c;健康知识管理&#xff0c;管理员管理&#xff0c;论坛管理&#xff0c;公告管理 顾问账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;顾…

宝藏速成秘籍(3)选择排序法

一、前言 1.1、概念 选择排序法&#xff08;Selection Sort&#xff09;是一种简单直观的排序算法。它的基本思想是&#xff1a;每次从待排序的数组中选择最小&#xff08;或最大&#xff09;的元素&#xff0c;将其放在已排序部分的末尾&#xff0c;直到所有元素都排序完毕。…

资源分享—2021版乡级制图规范符号库

汇总整理超图平台软件相关的各类资源&#xff08;包括但不限于符号库、地图模板、地理处理模型等&#xff09;&#xff0c;助力项目的高效制图、提高数据生产效率等业务。 本次分享新版国土空间规划【2021版乡级制图规范符号库】&#xff0c;提供SuperMap格式符号库下载。 符…

简单了解CPU的工作原理

目录 一、基本结构以及对应功能 &#xff08;1&#xff09;基本结构 &#xff08;2&#xff09;几个重要寄存器的详细介绍 操作码 (Opcode) 操作数 (Operands) 指令表 (Instruction Table) 第一个&#xff1a;程序计数器 (PC) 第二个&#xff1a;指令寄存器 (IR&#x…

头歌资源库(3)爬楼梯问题

一、 问题描述 二、算法思想 假设要爬上n阶楼梯&#xff0c;我们可以将问题分解为子问题&#xff1a;爬到第n-1阶楼梯的方法数加上爬到第n-2阶楼梯的方法数加上爬到第n-3阶楼梯的方法数。 设f(n)表示爬到第n阶楼梯的方法数&#xff0c;则有递推关系&#xff1a;f(n) f(n-1…

有声读物管理平台Booksonic-Air

老苏最近在听评书&#xff0c;所以想找个软件来管理和收听&#xff0c;找了一圈&#xff0c;感觉 Booksonic-Air 可能能满足老苏的需求。 什么是 Booksonic-Air &#xff1f; Booksonic-Air 是一个用于流式传输有声读物的服务器&#xff0c;是原始 Booksonic 服务器的后继者。…