【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(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是一个有传参的方法

 

【c#】代码中对于=>符号的理解

上一篇:Windows删除被占用的文件或文件夹


下一篇:记录一下linux安装wine的坑点