首页 > 编程语言 >C#中的delegate与Lambda表达式

C#中的delegate与Lambda表达式

时间:2024-03-07 10:49:09浏览次数:23  
标签:reset false C# gui Enabled delegate Lambda 表达式 lambda

参考:

Lambda 表达式和匿名函数

 什么是lambda 表达式?

C# 中的 lambda 表达式是一种匿名函数,可以用于简化代码,避免定义命名函数或委托。

lambda 表达式的语法如下:

(parameter1, parameter2, ...) => expression

lambda 表达式的示例:

C#
// 将一个数字加 1
Func<int, int> addOne = x => x + 1;

// 将两个数字相加
Func<int, int, int> add = (x, y) => x + y;

// 将一个字符串转换为大写
Func<string, string> toUpperCase = s => s.ToUpper();


lambda 表达式的应用场景如下:

  • 委托: lambda 表达式可以用于定义匿名委托,从而简化代码。
  • LINQ: lambda 表达式可以用于定义 LINQ 查询表达式,从而简化查询代码。
  • 事件处理程序: lambda 表达式可以用于定义事件处理程序,从而简化事件处理代码

LINQ:

Language Integrated Query的缩写,它是一种将查询功能直接集成到编程语言中的技术。

LINQ由微软开发,旨在为.NET Framework提供更高效的数据处理能力。它允许开发人员使用类似于SQL的语法来查询各种数据源,包括关系型数据库、XML文档、ADO.NET数据集以及自定义对象集合。这种技术极大地简化了数据查询的过程,因为它使用程序员熟悉的语言结构,而不是依赖于特定的数据库查询语言。

任何 Lambda 表达式都可以转换为委托类型。 Lambda 表达式可以转换的委托类型由其参数和返回值的类型定义。 如果 lambda 表达式不返回值,则可以将其转换为 Action 委托类型之一;否则,可将其转换为 Func 委托类型之一。

 

将以下代码改为不使用delegate:

_syncContext.Post(
delegate
{
AddListItem("System disconnected");
bool reset_gui = false;

if (!_closing && _autoconnect && cbAutoReconnect.Checked)
{
frmReconnecting frm = new frmReconnecting(this, _system);

if (frm.ShowDialog() == DialogResult.Cancel)
reset_gui = true;
}
else
{
reset_gui = true;
}

if (reset_gui)
{
btnConnect.Enabled = true;
btnDisconnect.Enabled = false;
btnTrigger.Enabled = false;
cbLiveDisplay.Enabled = false;

picResultImage.Image = null;
lbReadString.Text = "";
}
},
null);

不使用delegate:

_syncContext.Post(() =>
{
AddListItem("System disconnected");
bool reset_gui = false;

if (!_closing && _autoconnect && cbAutoReconnect.Checked)
{
frmReconnecting frm = new frmReconnecting(this, _system);

if (frm.ShowDialog() == DialogResult.Cancel)
reset_gui = true;
}
else
{
reset_gui = true;
}

if (reset_gui)
{
btnConnect.Enabled = true;
btnDisconnect.Enabled = false;
btnTrigger.Enabled = false;
cbLiveDisplay.Enabled = false;

picResultImage.Image = null;
lbReadString.Text = "";
}
}, null);

 

标签:reset,false,C#,gui,Enabled,delegate,Lambda,表达式,lambda
From: https://www.cnblogs.com/jonvy/p/18058332

相关文章

  • 【实战技能】简单易实现的SWD接口烧录目标板挂载的EEPROM,支持AT24C02/04/08/16/32/64/
    之前针对外部SPIFlash的SWD接口烧写,制作过一期专题视频教程。产品生产时,不仅SPIFlash,有时候希望烧录目标板程序后,将EERPOM里面的参数也通过SWD接口存储进去,这样就不再需要大家单独再接上EEPROM的I2C接口烧录了,产品生产比较省事。针对这个问题就花了些时间,制作了下EEPROM的烧写......
  • NetCore Rtsp视频流转Websocket实现Web实时查看摄像头
    .NetCoreRtsp视频流转Websocket实现Web实时查看摄像头最近工作中遇到需求需要实现这个功能,网上找了很多方案,大都是转为视频文件保存,实时查看的方案倒比较少,最终自己慢慢琢磨了很久在windows系统下实现了,里面的核心思路是:由FFmpeg.AutoGen捕捉Rtsp流视频帧,转为Bitmap,借由Websocke......
  • 【Oracle】使用like的时候遇到的问题
    【Oracle】使用like的时候遇到的问题like语句其中的%就代表着一个零或者多个字符,_代表一个字符,%与_可以同时使用name想查询以‘_’结尾的字符用这个语句就会有问题selectcount(1)fromdualwhere'底壳组件.pdf'like'%_'LIKE语句与多个下划线一样可以匹配出来数据,一般遇......
  • Django Custom Authentication | Registration, Login, Logout, ResetPassword, UserP
    Startaprojectdjango-adminstartprojectregistrationFormProjectdirectoryregistration/settings.py#ApplicationdefinitionINSTALLED_APPS=['django.contrib.admin',#Usedforauthentication'django.contrib.auth',......
  • JavaScript 最新动态:2024 年新功能
    前言随着Web技术的日新月异,JavaScript也在不断地吸收新的特性和技术,以满足日益复杂和多样化的开发需求。在2024年,JavaScript迎来了一系列令人瞩目的新功能,这些功能不仅提升了开发者的效率,也极大地丰富了Web应用的表现力和交互性。在接下来的内容中,我们将逐一介绍这些新......
  • Arch Linux使用archinstall快速安装配置2024版
    ArchLinux使用archinstall快速安装配置2024版参考:https://wiki.archlinuxcn.org/wiki/安装指南官方安装指南比较繁琐,有提供archinstall​但是并没有详细介绍对应配置项,本教程根据自身安装经历编写安装前的准备[​编辑|编辑源代码]获取安装映像[​编辑|编辑源代......
  • Oracle 外部表
    在Oracle数据库中,外部表是一种特殊类型的表,它们并不存储数据在数据库中,而是指向外部数据源(如文本文件、CSV文件、Excel文件等),通过外部表可以在数据库中对外部数据进行查询和操作。外部表与常规表之间的关联主要是通过创建表的方式来实现。要创建外部表并将其与数据库中的其他表进......
  • META-INF/spring.factories自动化配置
    META-INF/spring.factories文件是SpringBoot项目中非常重要的一个文件,用于声明各种自动配置类、监听器、初始化器等。这个文件通常用来启用和配置各种SpringBoot自动配置模块。具体来说,spring.factories文件采用Java的属性文件格式,其中包含了多个键值对,每个键代表一个......
  • vscode 两种定位跳转的方法 ctrl+p 方法1 path:行号 方法2 #变量名 - 针对$store变量
    vscode两种定位跳转的方法ctrl+p方法1path:行号方法2#变量名-针对$store变量不好找的方案方法1可以备注在代码里面问题$store的变量不能跳转,有跳转插件也不能跳转解决方案方法1备注上文件地址和行号,然后选择备注那行ctrl+cctrl+p回车不足的地方是代码变了,行号不......
  • Elasticsearch 集群网络配置实例
    网络配置在elasticsearch中,客户端通过http与es进行通信;es集群节点间主要通过transport进行通信。在不同的网络环境下,需要进行相应的网络配置调整。简单网络环境单网卡假设只有一个网络接口A,IP地址为176.33.2.101、http通信端口9200、transport通信端口9300。#监听的IPnetw......