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

news2025/2/25 13:41:53

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

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

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

相关文章

【LeetCode:2786. 访问数组中的位置使分数最大 + 递归 + 记忆化缓存 + dp】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

MySQL之优化服务器设置(一)

优化服务器设置 配置MySQL的IO行为 有一些配置影响着MySQL怎样同步数据到磁盘以及如何做恢复操作。这些操作对性能的影响非常大&#xff0c;因为都涉及到昂贵的IO操作。它们也表现了性能和数据安全之间的权衡。通常&#xff0c;保证数据立刻并且一致地写到磁盘是很昂贵的。如…

Leetcode刷题笔记11

415. 字符串相加 415. 字符串相加 - 力扣&#xff08;LeetCode&#xff09; 解法一&#xff1a;头插 头插是指将一个新元素插入到链表的头部&#xff08;即第一个位置&#xff09;。 比如对于456和77&#xff0c;先计算两个数字的末项67的结果&#xff0c;然后往前挪动一位 …

Android开发AndroidStudio安装教程

本文图示展示AndroidStudio安装教程。 目录 一、下载安装包 二、安装 一、下载安装包 https://developer.android.google.cn/studio?hlzh-cn 二、安装 双击exe Next Next Next 默认点击Install Next 点击finish进入设置文件界面。 如果本地有设置文件&#xff0c;选择C…

Vulnhub-DC-9

靶机IP:192.168.20.144 kaliIP:192.168.20.128 网络有问题的可以看下搭建Vulnhub靶机网络问题(获取不到IP) 信息收集 nmap扫描一下端口及版本号 dirsearch扫目录 最后去前端界面观察发现也没什么隐藏路径。 观察功能&#xff0c;search引起注意&#xff0c;SQL注入测试 当输…

tsp可视化python

随机生成点的坐标并依据点集生成距离矩阵&#xff0c;通过点的坐标实现可视化 c代码看我的这篇文章tsp动态规划递归解法c from typing import List, Tuple import matplotlib.pyplot as plt from random import randintN: int 4 MAX: int 0x7f7f7f7fdistances: List[List[in…

模板方法模式(大话设计模式)C/C++版本

模板方法模式 C #include <iostream> using namespace std;class TestPaper { public:void TestQ1(){cout << "杨过得到&#xff0c;后来给了郭靖&#xff0c;炼成倚天剑&#xff0c;屠龙刀的玄铁可能是[ ]\na.球磨铸铁 b.马口贴 c.高速合金钢 d.碳素纤维&q…

仿FC数学金刚游戏介绍

简介 Math Monkey是Simple2l工作室开发的第二款小游戏&#xff0c;灵感来源于FC游戏平台的数学金刚游戏。小学时玩FC游戏是业余时间最期待的事情&#xff0c;还记得有一次和玩伴玩游戏时已经晚上了&#xff0c;于是约定再玩一把就各回各家&#xff0c;没想到又连玩了N把每一把…

Pytorch 卷积神经网络-手写数字识别

卷积神经网络是深度学习中的一个里程碑式的技术&#xff0c;有了这个技术&#xff0c;才会让计算机有能力理解图片和视频信息&#xff0c;才会有计算机视觉的众多应用。 本文讨论卷积神经网络模型&#xff08;CNN&#xff09;的Hello World。前面讨论的是一个二分类问题&#x…

LeetCode | 387.字符串中的第一个唯一字符

这道题可以用字典解决&#xff0c;只需要2次遍历字符串&#xff0c;第一次遍历字符串&#xff0c;记录每个字符出现的次数&#xff0c;第二次返回第一个出现次数为1的字符的下标&#xff0c;若找不到则返回-1 class Solution(object):def firstUniqChar(self, s):""…

MFC基础学习应用

MFC基础学习应用 1.基于对话框的使用 左上角为菜单键&#xff08;其下的关于MFC主要功能由IDD_ABOUTBOX决定) 附图 右下角为按钮&#xff08;基本功能由IDD_DIALOG决定,添加按钮使用由左上角的工具箱完成) 附图 2.自行添加功能与按钮//功能代码 void CMFCApplication4Dlg:…

使用thymeleaf直接渲染字符串

目录 一、依赖 二、示例代码 一、依赖 <--JAVA 8--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId><version>2.7.18</version></dependency><-…

怎么图片转excel表格?推荐三个方法

怎么图片转excel表格&#xff1f;在信息化高速发展的今天&#xff0c;图片转Excel表格的需求日益凸显&#xff0c;尤其是在职场办公中&#xff0c;这一需求更是显得尤为迫切。为了满足广大用户的需求&#xff0c;市面上涌现出了众多图片转Excel的软件。今天&#xff0c;就为大家…

[面试题]Java【并发】

[面试题]Java【基础】[面试题]Java【虚拟机】[面试题]Java【并发】[面试题]Java【集合】[面试题]MySQL 因为 Java 并发涉及到的内容会非常多&#xff0c;本面试题可能很难覆盖到所有的知识点&#xff0c;所以推荐 《Java并发编程的艺术》 。 Java 线程 线程 通知 等待 线…

Vue38-组件的几个注意点

一、组件回顾 1-1、创建组件 1-2、注册组件 1-3、使用组件 二、注意点&#xff1a;组件名 2-1、组件名一个单词&#xff1a;纯小写&#xff0c;或者&#xff0c;首字母大写 2-2、多个单词&#xff1a; 1、xx-bbbb 2、AaaBbbb&#xff1a;每个单词的首字母都大写 前提&…

js轮播图有,移入移出事件,左右滑动事件功能

效果图&#xff1a; 具体代码&#xff1a; <!DOCTYPE html> <html> <head> <meta charset"utf-8" /> <meta name"viewport" content"widthdevice-width, initial-scale1"> <title></title> </he…

HTML静态网页成品作业(HTML+CSS)—— 明星吴磊介绍网页(5个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有5个页面。 二、作品演示 三、代…

【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 的图形…

shell脚本简单命令

shell脚本 脚本就是可运行代码的集合&#xff0c;脚本语言&#xff08;计算机语言&#xff09;脚本的特点&#xff1a;从上到下&#xff0c;按行执行。 python 脚本语言 格式更严谨 严格的执行锁进。也是从上到下按行执行。 shell脚本就是在shell环境&#xff08;/bin/bash&…

终于把AUC的计算方式搞懂了!

1. 横纵坐标 纵坐标&#xff1a;sensitivity或者TPR 横坐标&#xff1a;FPR 或者 1-Specificity 2. 计算方法 2.1 方法1 def get_roc_auc(y_true, y_score):"""正样本得分大于负样本得分的概率&#xff0c;需要遍历每个正样本和每个负样本1. 选取所有正样本与…