当前位置: 首页 > news >正文

C#面试常考随笔7:什么是匿名⽅法?还有Lambda表达式?

匿名方法本质上是一种没有显式名称的方法,它可以作为参数传递给需要委托类型方法,常用于事件处理、回调函数等场景,能够让代码更加简洁和紧凑。

使用场景

  • 事件处理:在处理事件时,不需要为每个事件处理程序单独定义一个命名方法,可以直接使用匿名方法。
  • 回调函数:当某个方法需要一个委托作为参数,用于后续的回调操作时,可以使用匿名方法来提供具体的实现逻辑。

语法

匿名方法使用 delegate 关键字来定义,基本语法如下:

delegate (参数列表)
{方法体;
};

示例:

无参数的匿名方法
using System;class Program
{static void Main(){// 定义一个无参数的委托类型Action myAction = delegate (){Console.WriteLine("这是一个无参数的匿名方法");};// 调用委托myAction();}
}
带参数的匿名方法
using System;class Program
{static void Main(){// 定义一个带参数的委托类型Func<int, int, int> add = delegate (int a, int b){return a + b;};// 调用委托int result = add(3, 5);Console.WriteLine($"结果是: {result}");}
}
在事件处理中使用匿名方法
using System;
using System.Threading;class EventExample
{public event EventHandler MyEvent;public void TriggerEvent(){MyEvent?.Invoke(this, EventArgs.Empty);}
}class Program
{static void Main(){EventExample example = new EventExample();// 使用匿名方法处理事件example.MyEvent += delegate (object sender, EventArgs e){Console.WriteLine("事件被触发了");};// 触发事件example.TriggerEvent();}
}

优缺点

优点
  • 代码简洁:避免了为每个简单的委托实现单独定义一个命名方法,减少了代码量,使代码更加紧凑。
  • 内联定义:可以在需要委托的地方直接定义逻辑,提高了代码的可读性和可维护性。
缺点
  • 复用性差:由于匿名方法没有名称,不能在其他地方复用,只能在定义的地方使用。
  • 调试不便:在调试时,由于没有明确的方法名称,可能会增加调试的难度。

与 Lambda 表达式的关系

在 C# 3.0 及以后的版本中,引入了 Lambda 表达式,它是一种更简洁的创建委托实例的方式,通常可以替代匿名方法。例如,上面的 add 委托使用 Lambda 表达式可以写成:

Func<int, int, int> add = (a, b) => a + b;

Lambda 表达式在语法上更加简洁,因此在实际开发中使用更为广泛。

参数列表规则

  • 无参数:如果 Lambda 表达式不需要参数,可以使用空的参数列表,例如:() => Console.WriteLine("无参数的Lambda表达式");
  • 单个参数:当只有一个参数时,可以省略参数列表的括号,例如:num => num * 2;
  • 多个参数:多个参数需要用逗号分隔,并放在括号内,例如:(a, b) => a + b;

相关文章:

C#面试常考随笔7:什么是匿名⽅法?还有Lambda表达式?

匿名方法本质上是一种没有显式名称的方法&#xff0c;它可以作为参数传递给需要委托类型的方法&#xff0c;常用于事件处理、回调函数等场景&#xff0c;能够让代码更加简洁和紧凑。 使用场景 事件处理&#xff1a;在处理事件时&#xff0c;不需要为每个事件处理程序单独定义…...

Elasticsearch:如何搜索含有复合词的语言

作者&#xff1a;来自 Elastic Peter Straer 复合词在文本分析和标记过程中给搜索引擎带来挑战&#xff0c;因为它们会掩盖词语成分之间的有意义的联系。连字分解器标记过滤器等工具可以通过解构复合词来帮助解决这些问题。 德语以其长复合词而闻名&#xff1a;Rindfleischetik…...

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.25 视觉风暴:NumPy驱动数据可视化

1.25 视觉风暴&#xff1a;NumPy驱动数据可视化 目录 #mermaid-svg-i3nKPm64ZuQ9UcNI {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-i3nKPm64ZuQ9UcNI .error-icon{fill:#552222;}#mermaid-svg-i3nKPm64ZuQ9UcNI …...

idea maven本地有jar包,但还要从远程下载

idea 中&#xff0c;java 工程执行 maven reimport&#xff0c;报jar报无法下载。 我奇了个怪&#xff0c;我明明在本地仓库有啊&#xff0c;你非得从远程下载&#xff1f; 我从供应商那里拿来的&#xff0c;远程当然没有了。 这太奇葩了吧&#xff0c;折腾好久不行。 后来…...

C++编程语言:抽象机制:模板(Bjarne Stroustrup)

目录 23.1 引言和概观(Introduction and Overview) 23.2 一个简单的字符串模板(A Simple String Template) 23.2.1 模板的定义(Defining a Template) 23.2.2 模板实例化(Template Instantiation) 23.3 类型检查(Type Checking) 23.3.1 类型等价(Type Equivalence) …...

深入解析 Linux 内核中的页面错误处理机制

在现代操作系统中,页面错误(Page Fault)是内存管理的重要组成部分。当程序试图访问未映射到物理内存的虚拟内存地址时,CPU 会触发页面错误异常。Linux 内核通过一系列复杂的机制来处理这些异常,确保系统的稳定性和性能。本文将深入解析 Linux 内核中处理页面错误的核心代码…...

【AIGC专栏】AI在自然语言中的应用场景

ChatGPT出来以后&#xff0c;突然间整个世界都非常的为之一惊。很多人大喊AI即将读懂人类&#xff0c;虽然这是一句夸大其词的话&#xff0c;但是经过未来几十年的迭代&#xff0c;ChatGPT会变成什么样我们还真的很难说。在当前生成式内容来说&#xff0c;ChatGPT毫无疑问在当前…...

Ubuntu 20.04安装Protocol Buffers 2.5.0

个人博客地址&#xff1a;Ubuntu 20.04安装Protocol Buffers 2.5.0 | 一张假钞的真实世界 安装过程 Protocol Buffers 2.5.0源码下载&#xff1a;https://github.com/protocolbuffers/protobuf/tree/v2.5.0。下载并解压。 将autogen.sh文件中以下内容&#xff1a; curl htt…...

解锁豆瓣高清海报(一) 深度爬虫与requests进阶之路

前瞻 PosterBandit 这个脚本能够根据用户指定的日期&#xff0c;爬取你看过的影视最高清的海报&#xff0c;然后使用 PixelWeaver.py 自动拼接成指定大小的长图。 你是否发现直接从豆瓣爬取下来的海报清晰度很低&#xff1f; 使用 .pic .nbg img CSS 选择器&#xff0c;在 我…...

计算机组成原理——数据运算与运算器(二)

生活就像一条蜿蜒的河流&#xff0c;有时平静&#xff0c;有时湍急。我们在这条河流中前行&#xff0c;会遇到风雨&#xff0c;也会遇见阳光。重要的是&#xff0c;无论遇到什么&#xff0c;都要保持内心的平静与坚定。每一次的挫折&#xff0c;都是让我们成长的机会&#xff1…...

SpringBoot+Vue的理解(含axios/ajax)-前后端交互前端篇

文章目录 引言SpringBootThymeleafVueSpringBootSpringBootVue&#xff08;前端&#xff09;axios/ajaxVue作用响应式动态绑定单页面应用SPA前端路由 前端路由URL和后端API URL的区别前端路由的数据从哪里来的 Vue和只用三件套axios区别 关于地址栏url和axios请求不一致VueJSPS…...

【AI】DeepSeek 概念/影响/使用/部署

在大年三十那天&#xff0c;不知道你是否留意到&#xff0c;“deepseek”这个词出现在了各大热搜榜单上。这引起了我的关注&#xff0c;出于学习的兴趣&#xff0c;我深入研究了一番&#xff0c;才有了这篇文章的诞生。 概念 那么&#xff0c;什么是DeepSeek&#xff1f;首先百…...

javascript-es6 (二)

函数进阶 函数提升 函数提升与变量提升比较类似&#xff0c;是指函数在声明之前即可被调用 好处&#xff1a;能够使函数的声明调用更灵活 函数提升出现在 相同作用域 当中 //可调用函数 fn()//后声明函数 function fn() {console.log(可先调用再声明) } 注意&#xff1a;函数表…...

供应链系统设计-供应链中台系统设计(十四)- 清结算中心设计篇(三)

关于清结算中心的设计&#xff0c;我们之前的两篇文章中&#xff0c;对于业务诉求的好的标准进行了初步的描述&#xff0c;如果没有看的同学可以参考一下两篇文章进行了解&#xff0c;这样更有利于理解本篇的内容。链接具体如下&#xff1a; 供应链系统设计-供应链中台系统设计…...

【自学笔记】MySQL的重点知识点-持续更新

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 MySQL重点知识点MySQL知识点总结一、数据库基础二、MySQL的基本使用三、数据类型四、触发器&#xff08;Trigger&#xff09;五、存储引擎六、索引七、事务处理八、…...

X86路由搭配rtl8367s交换机

x86软路由&#xff0c;买双网口就好。或者单网口主板&#xff0c;外加一个pcie千兆。 华硕h81主板戴尔i350-T2双千兆&#xff0c;做bridge下载&#xff0c;速度忽高忽低。 今天交换机到货&#xff0c;poe供电&#xff0c;还是网管&#xff0c;支持Qvlan及IGMP Snooping&#xf…...

Linux环境基础开发工具的使用(apt, vim, gcc, g++, gbd, make/Makefile)

目录 什么是软件包 Linux 软件包管理器 apt 认识apt 查找软件包 安装软件 如何实现本地机器和云服务器之间的文件互传 卸载软件 Linux编辑器 - vim vim的基本概念 vim下各模式的切换 vim命令模式下各指令汇总 vim底行模式个指令汇总 Linux编译器 - gcc/g gcc/g的作…...

多模态论文笔记——ViViT

大家好&#xff0c;这里是好评笔记&#xff0c;公主号&#xff1a;Goodnote&#xff0c;专栏文章私信限时Free。本文详细解读多模态论文《ViViT: A Video Vision Transformer》&#xff0c;2021由google 提出用于视频处理的视觉 Transformer 模型&#xff0c;在视频多模态领域有…...

搜索与图论复习1

1深度优先遍历DFS 2宽度优先遍历BFS 3树与图的存储 4树与图的深度优先遍历 5树与图的宽度优先遍历 6拓扑排序 1DFS&#xff1a; #include<bits/stdc.h> using namespace std; const int N10; int n; int path[N]; bool st[N]; void dfs(int u){if(nu){for(int i0;…...

【数据结构】初识链表

顺序表的优缺点 缺点&#xff1a; 中间/头部的插入删除&#xff0c;时间复杂度效率较低&#xff0c;为O(N) 空间不够的时候需要扩容。 如果是异地扩容&#xff0c;增容需要申请新空间&#xff0c;拷贝数据&#xff0c;释放旧空间&#xff0c;会有不小的消耗。 扩容可能会存在…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

XCTF-web-easyupload

试了试php&#xff0c;php7&#xff0c;pht&#xff0c;phtml等&#xff0c;都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接&#xff0c;得到flag...

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装&#xff08;Encapsulation&#xff09; 定义&#xff1a;将数据&#xff08;属性&#xff09;和操作数据的方法绑定在一起&#xff0c;通过访问控制符&#xff08;private、protected、public&#xff09;隐藏内部实现细节。示例&#xff1a; public …...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架&#xff0c;支持"一次开发&#xff0c;多端部署"&#xff0c;可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务&#xff0c;为旅游应用带来&#xf…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码&#xff0c;实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

springboot 日志类切面,接口成功记录日志,失败不记录

springboot 日志类切面&#xff0c;接口成功记录日志&#xff0c;失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...

《Docker》架构

文章目录 架构模式单机架构应用数据分离架构应用服务器集群架构读写分离/主从分离架构冷热分离架构垂直分库架构微服务架构容器编排架构什么是容器&#xff0c;docker&#xff0c;镜像&#xff0c;k8s 架构模式 单机架构 单机架构其实就是应用服务器和单机服务器都部署在同一…...