标签:new isp relay lam 运算符 hang eol rgs test
先来个简单的例子
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(m_detail, idd)
), index, m_detail,id);
拆解:
最外层为BeginInvoke(方法的委托,传参1,传参2,传参3)
方法的委托:new Action<委托参数类型>(执行的方法) 封装一个方法,该方法具有三个参数并且不返回值
执行的方法:(idx, item,idd) =>m_TestForm[idx].Updatefun(m_detail, idd) 左边是传入参数,右边m_TestForm[idx].Updatefun是一个有传参的方法
标签:new isp relay lam 运算符 hang eol rgs test
原文地址:https://www.cnblogs.com/Mars-0603/p/14183616.html