C#广泛应用的简洁匿名函数Lambda 表达式

Lambda 表达式是一种简洁的方式来定义匿名函数(没有名称的函数)。在 C# 中,Lambda 表达式常用于简化代码,尤其是在需要传递函数作为参数或者定义内联方法时。Lambda 表达式的语法和功能在很多 .NET API 中都得到了广泛应用,比如 LINQ 查询、事件处理和异步编程。

基本语法

Lambda 表达式的基本语法如下:

(parameters) => expression_or_statement_block

示例

  1. 无参数的 Lambda 表达式:

    Action greet = () => Console.WriteLine("Hello, World!");
    greet(); // 输出 "Hello, World!"
    
    • Action 是一个代表没有参数且没有返回值的委托类型。
    • () => Console.WriteLine("Hello, World!") 是一个无参数的 Lambda 表达式。
  2. 一个参数的 Lambda 表达式:

    Func<int, int> square = x => x * x;
    int result = square(5); // result = 25
    
    • Func<int, int> 是一个代表一个输入参数和一个输出结果的委托类型。
    • x => x * x 是一个接受一个整数参数并返回其平方的 Lambda 表达式。
  3. 多个参数的 Lambda 表达式:

    Func<int, int, int> add = (a, b) => a + b;
    int sum = add(3, 4); // sum = 7
    
    • Func<int, int, int> 是一个接受两个整数参数并返回一个整数结果的委托类型。
    • (a, b) => a + b 是一个接受两个参数并返回它们的和的 Lambda 表达式。
  4. 包含多个语句的 Lambda 表达式:

    Action<int> printDetails = x =>
    {Console.WriteLine($"Value: {x}");Console.WriteLine($"Square: {x * x}");
    };
    printDetails(5);
    
    • 这里的 Lambda 表达式包含一个语句块(用 {} 包围),可以在块内执行多个语句。

使用场景

  1. LINQ 查询: Lambda 表达式在 LINQ 查询中用作筛选、排序和选择数据的条件。

    List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
    var evenNumbers = numbers.Where(n => n % 2 == 0);
    
  2. 事件处理: Lambda 表达式可以用来快速定义事件处理程序。

    Button button = new Button();
    button.Click += (sender, e) => Console.WriteLine("Button clicked!");
    
  3. 任务和异步编程: 在任务和异步编程中,Lambda 表达式简化了代码的编写。

    Task.Run(() => 
    {// 异步操作Console.WriteLine("Task is running.");
    });
    

优势

  • 简洁: 省去了定义命名方法的开销,使得代码更加简洁。
  • 可读性: 将函数逻辑内联到调用处,提高了代码的可读性。
  • 灵活性: Lambda 表达式使得可以在运行时动态定义和传递行为。

注意事项

  • 类型推断: Lambda 表达式的参数和返回值的类型通常可以由编译器推断。
  • 作用域: Lambda 表达式可以捕获其创建时所在作用域中的变量(闭包)。

Lambda 表达式是现代编程语言中处理函数式编程的强大工具,它使得代码更加紧凑和易于理解。

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

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

相关文章

js 深入理解生成器

目录 概述1 . 生成器基础2. 与普通函数的区别3. 通过 yield 中断执行3.1 yield 是干嘛的&#xff1f;3.2 yield 和 return 的区别3.3 每个生成器对象作用域都是独立的3.4 yeild 的使用位置3.5 生成器对象作为可迭代对象3.6 使用 yield 实现输入和输出3.6.1 yield实现输入3.6.1 …

【JVM安装MySQL】

环境 > VMware Workstation Pro > CentOS 7 >Navicat Premium Lite > MobaXterm添加 MySQL Yum 仓库 根据操作系统在下载界面选取对应yum库进行下载 wget https://dev.mysql.com/get/mysql80-community-release-el7-9.noarch.rpm在文件下载界面安装 rpm -ivh mysq…

<<编码>> 第 14 章 反馈与触发器(3)--锁存器与触发器 示例电路

电平触发 D 型触发器 info::操作说明 鼠标单击逻辑输入切换 0|1 状态 因复位和置位不应同时处在高电平, 因此在输入处加入一个非门反向, 然后复位和置位输入合并为 数据(Data) 输入 注: 当保持位为 0 时, 数据输入无效 primary::在线交互操作链接 https://cc.xiaogd.net/?star…

Stylized Smooth Clouds 卡通风格化云朵包

下载:​​Unity资源商店链接资源下载链接 效果图:

Spring考点总结

01.Spring框架的基本理解 关键字:核心思想IOC\AOP\作用(解耦、简化)&#xff0c;简单描述框架组成 Spring框架是一款轻量级的开发框架&#xff0c;核心思想是IOC&#xff08;控制反转&#xff09;和AOP&#xff08;面向切面编程&#xff09;&#xff0c; 为Java应用程序开发…

数字IC设计\FPGA 职位经典笔试面试整理--语法篇 Verilog System Verilog(部分)

注&#xff1a; 资料都是基于网上一些博客分享和自己学习整理而成的 Verilog 1. 数据类型 Verilog一共有19种数据类型 基础四种数据类型&#xff1a;reg型&#xff0c;wire型&#xff0c;integer型&#xff0c;parameter型 reg型   reg类型是寄存器数据类型的关键字。寄存…

软考(中级-软件设计师)(0919)

软考 一、软件设计师-历年考试考点分布情况-上午-计算机与软件工程知识 知识点分数说明比例软件工程基础知识11开发模型、设计原则、测试方法、质量特性、CMM、Pert图、风险管理14.67%面向对象12面向对象基本概念、面向对象分析与设计、UML、常见算法16.00%数据结构与算法10…

【HarmonyOS NEXT】DevEco快速实现真机截屏,并保存到电脑

点日志点照机图标选一个路径保存图片在ide中右键图片&#xff0c;点复制电脑随便找个位置保存图片https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/ide-screenshot-V5

使用Ubuntu耳机输出正弦波信号

最近有一个项目想使用喇叭发出一个标准的正弦波测试信号&#xff0c;故记录下操作过程 sudo apt install libasound2-dev 否则有可能会报错&#xff1a; alsaaudio.c:28:10: fatal error: alsa/asoundlib.h: No such file or directory 安装pyalsaaudio&#xff1a; pip …

IE浏览器彻底去除浏览器缓存的方法

1.浏览器右上方如图操作 2.点击后会弹出窗口&#xff0c;如图操作 3.点击查看文件如图操作 4&#xff0e;点击后会弹出一个文件夹&#xff0c;在文件夹内CtrlA全选删除全部文件就可以&#xff0c;有提示直接确认即可

智能车镜头组入门(三)巡线

镜头组的特点是通过摄像头来获取赛道的信息&#xff0c;从而达到前瞻的效果&#xff0c;完成转向和速度决策。 我们的方案&#xff0c;带上元素识别&#xff0c;大概在TC264上5ms一帧&#xff0c;所以我们开了100hz的图象。 之前我看别的博客上有人说&#xff0c;他们组的50帧…

光伏检测数据集(六种)

光伏检测数据集(六种) 1.并网光伏系统故障诊断数据集 (该数据集为excel张&#xff0c;对故障类型完成标注)。 2.分布式光伏目标检测数据集 (该数据集共4000张分布式光伏高清图片&#xff0c;均已标注) 3.光伏电池板缺陷检测数据集 (该数据集共2400张光伏板缺陷高清图片&#xf…

DC-DC降压10A电源降压可调模块24V转12V9V5V3V-AH1514芯片

AH1514&#xff1a;一款高效率小体积的DC-DC降压电源芯片 摘要&#xff1a;本文介绍了一款高性能的DC-DC降压电源芯片——AH1514&#xff0c;该芯片具有24V转12V、9V、5V、3V可调输出&#xff0c;支持7V-38V输入&#xff0c;20A峰值输出电流&#xff0c;且具有小体积、高效率的…

【计算机网络】TCP的可靠传输机制、标记位以及编程结构

文章目录 一、TCP的可靠传输的工作原理1、确认应答机制和捎带应答机制2、超时重传3、快速重传4、滑动窗口5、流量控制 未 PSH6、拥塞控制7、延迟应答8、TCP 以段为单位发送数据 二、TCP 首部的六个标记位1、URG2、ACK3、PSH4、RST5、SYN6、FIN 三、TCP网络并发编程 一、TCP的可…

下载docker镜像报错,dial tcp x.x.x.x:443: connect: connection refused

原因是:国外的连接超时了. 解决方案改为阿里云的数据源 打开阿里云 搜索&#xff1a;容器镜像服务 ACR 把你自己的这个直接复制在linux sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-EOF { "registry-mirrors": ["你自己的"] }…

面试官问:如何解决消息队列的延时以及过期失效问题?

消息的可靠性传输 ActiveMQ 要保证消息的可靠性&#xff0c;除了消息的持久化&#xff0c;还包括两个方面&#xff0c;一是生产者发送的消息可以被ActiveMQ收到&#xff0c;二是消费者收到了ActiveMQ发送的消息。 生产者 非持久化又不在事务中的消息&#xff0c;可能会有消…

黑神话悟空+云技术,游戏新体验!

近期&#xff0c;一款名为黑神话悟空的游戏因其独特的艺术风格和创新的技术实现在玩家中产生了不小的影响。 而云桌面技术作为一种新兴的解决方案&#xff0c;正在改变人们的游戏体验方式&#xff0c;使得高性能游戏可以在更多设备上流畅运行。 那么&#xff0c;黑神话悟空如…

《深入理解 Java 线程池:高效管理线程的利器》

线程池 1. 什么是线程池&#xff1f; ​ 线程池内部维护了若干个线程&#xff0c;没有任务的时候&#xff0c;这些线程都处于等待空闲状态。如果有新的线程任务&#xff0c;就分配一个空闲线程执行。如果所有线程都处于忙碌状态&#xff0c;线程池会创建一个新线程进行处理或…

滑动窗口(6)_找到字符串中所有字母异位词

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 滑动窗口(6)_找到字符串中所有字母异位词 收录于专栏【经典算法练习】 本专栏旨在分享学习算法的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f4…

STM32 芯片启动过程

目录 一、前言二、STM32 的启动模式三、STM32 启动文件分析1、栈 Stack2、堆 Heap3、中断向量表 Vectors3.1 中断响应流程 4、复位程序 Reset_Handler5、中断服务函数6、用户堆栈初始化 四、STM32 启动流程分析1、初始化 SP、PC 及中断向量表2、设置系统时钟3、初始化堆栈并进入…