首页 > 编程语言 >C#开发-集合使用和技巧(二)Lambda 表达式介绍和应用

C#开发-集合使用和技巧(二)Lambda 表达式介绍和应用

时间:2024-06-15 23:01:00浏览次数:24  
标签:示例 C# Sex 参数 new 表达式 Lambda

C#开发-集合使用和技巧

Lambda 表达式介绍和应用

介绍

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

标签:示例,C#,Sex,参数,new,表达式,Lambda
From: https://blog.csdn.net/qq_39427511/article/details/139691605

相关文章

  • Windows中搭建centos虚拟机和MySQL
    背景前一段时间,博主为了在家里搭建学习环境,想模拟一个生产环境,尝试了Windows安装WSL、Vmwareworkstationplayer安装Ubuntu、把Window删了直接装Ubuntu、把Ubuntu删了装回Windows(Windows一直无法安装到SSD,最后拆了电脑拔了机械硬盘才装成功)的多个阶段,发现还是Windows用的习惯......
  • 【JAVA开发笔记】实战演练,如何用EasyExcel导出表格,并且自定义合并单元格
    目录1.前言2.EasyExcel简介3.EasyExcel简单导出案例讲解3.1EasyExcel依赖引入3.2测试类创建3.3Excel导出实现4.EasyExcel合并单元案例讲解4.1实现自定义合并策略4.2 使用自定义合并策略5.总结1.前言项目上,需将一个列表数据导出Excel表格,并将指定列相同......
  • servlet数量太多,搞个轻量级springmvc
    这两天用jsp+servlet+MySQL开发了一个企业网站,后台和前台都有,功能已经实现了,现在总结发现,servlet是真的多,我这个系统有7个表,后台实现一遍增删改查,就得有28个servlet,而且还有前台的部分,servlet的数量真的太多了,想想看springmvc,其实是可以写一个轻量级的springmvc的。在Servl......
  • Spring基础 - SpringMVC请求流程和案例
    前文我们介绍了Spring框架和Spring框架中最为重要的两个技术点(IOC和AOP),那我们如何更好的构建上层的应用呢(比如web应用),这便是SpringMVC;SpringMVC是Spring在SpringContainerCore和AOP等技术基础上,遵循上述WebMVC的规范推出的web开发框架,目的是为了简化Java栈的web开发。......
  • 基于单片机智能停车系统的设计与实现(论文+源码)_kaic
     基于单机片智能停车系统摘要:随着私家车数量的迅速增加,大中城市的停车问题越来越严重,人们早已习惯了将问题交给手机来解决。因此,迫切需要设计一个智能停车管理系统来支持移动终端,使用户能够通过移动终端实现停车查询、预订和支付。与传统的停车管理系统相比,智能停......
  • 高校毕业设计管理系统的设计与实现(论文+源码)_kaic
    目  录第1章绪  论1.1课题研究目的和意义1.2国外发展状况1.3开发环境1.4本文研究的主要内容第2章技术概述2.1设计原理2.2系统设计模式选定2.3数据库介绍2.4Struts介绍2.5系统中所应用的脚本和Ajax技术第3章需求分析3.1项目概述3.1.1......
  • NBT | 基因注释质量评估新工具OMArK,超越BUSCO
    今年2月,NatureBiotechnology在线发表论文:QualityassessmentofgenerepertoireannotationswithOMArk,描述了一个用于评估蛋白质编码基因注释质量的OMArk软件包。许多研究直接依赖于从基因组组装中预测的蛋白质编码基因库(“蛋白质组”)来进行比较。这样做依赖于以下假设:所有......
  • Tropical Plants | 改进的日本晴单倍型基因组UQ_NIP
    昆士兰大学RobertJ.Henry教授团队利用改进的单倍型水平基因组组装揭示更多的水稻基因。本研究利用更准确的测序技术,分析组装了一个改进的单倍型水平水稻基因组。该改进的基因组组装包含了早期基因组序列中缺失的区域,并且基于更高的序列准确性注释了3000多个新的基因。这个单倍......
  • C语言数据结构实现-双向链表
    前面学习了如何创建一个双向链表,本节学习有关双向链表的一些基本操作,即如何在双向链表中添加、删除、查找或更改数据元素。本节知识基于已熟练掌握双向链表创建过程的基础上,我们继续上节所创建的双向链表来学习本节内容,创建好的双向链表如图1所示:双向链表添加节点根据数据添......
  • VCF文件的genotype(GT)为何会出现".",而非常见的./.或.|.
    今天处理一个客户的基因型数据,遇到了一个格式转化的问题。我想将标准vcf转为某特定格式(类hapmap),之前基于pysam库写了一个比较成熟的脚本,运行了n年都没问题。但这次出错如下:a,b=v['GT']ValueError:notenoughvaluestounpack(expected2,got1)如果你直接去网上搜......