【c#】代码中对于=>符号的理解
先来个简单的例子
RelayCommand(() => this.AddPerson(), () => this.CanAddPerson());
可以翻译为 RelayCommand(参数一, 参数二);
参数一 :() => this.AddPerson()
参数二 :() => this.CanAddPerson()
() => this.AddPerson() 的意思是 一个没有参数的方法,返回 this.AddPerson(),而这个返回值的类型不用指定,系统会自动判断
同理 () => this.CanAddPerson() 就是 一个没有参数的方法返回this.CanAddPerson()
例二:
internal abstract class GeoService
{
internal abstract void Update(GeoLocation location);
internal abstract string Name { get; }
}
private List<GeoService> _geoServices = new List<GeoService>();
private void NotifyLocationChanged(GeoLocation location)
{
_geoServices.ForEach(g => g.Update(location));
}
_geoServices是一个list,3.5给他扩展了一个foreach方法,这个方法可以遍历一遍这个列表。
遍历列表干什么呢?
可以对列表的每个项目做点事情,这时可以用个委托,这样又要定义一个委托,语句太多了
=>就是lambda运算符,简化这些语法。
定义一个匿名委托,左边是参数,右边是函数体。
参数g没有定义类型是因为他自动推断出类型来了,因为这个list能遍历的东西只有这个。
这个语句里,就是遍历这个list列表,对每个项执行一下update方法。
例三:
new Action<ImageEventArgs>((arg)=>xxx)
这是new了一个Action类型的委托,Action是没有返回值的委托<ImageEventArgs>这个是委托的参数类型
(arg)是传入的参数 =>后面是方法体
this.Dispatcher.BeginInvoke(
new Action<int, TestDetailClass, int>(
(idx, item,idd) =>m_TestForm[idx].Updatefun(item, idd)
), index, m_detail,id);
拆解:
最外层为BeginInvoke(方法的委托,传参1,传参2,传参3)
这三个传参提供给委托方法使用
方法的委托:new Action<委托参数类型>(执行的方法)
封装一个方法,该方法定义了三个传参的类型,并且它不返回值
执行的方法:(idx, item,idd) =>m_TestForm[idx].Updatefun(item, idd)
左边是新声明的传入参数(对应的数据类型是int, TestDetailClass, int),他们的值来自于传入的三个参数:index,m_detail,id
右边m_TestForm[idx].Updatefun是一个有传参的方法
其实就是把index,m_detail,id传给m_TestForm[idx].Updatefun方法使用
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!