匿名表达式

这次来说说Lambda表达式吧,反正也简单,我也不像其他高手那样强调来强调去,只讲一下方法;

准备条件如下:

第一,匿名表达式必须存在与之对应的委托。

只要存在相对应的委托就可以了。接下来看图就可以了。这里有个Winform的Form_Load事件,首先我们要看函数签名,也就是有多少个形参,因为匿名方程需要和相对应的委托对应

这里可以看到,Winform::Form_Load方法的委托是EventHandler:

这时候我们要去速览一下定义,VisualStudio的速览定义是一个好东西,一定要好好使用撒~

点一下Load事件,这时候因为是标识符,所以VS会帮助我们圈定这个事件,然后我们可以通过Alt+F12键进行定义速览

,如果用F12的话是跳转到定义文件里面,效果会是这样的:

速览定义就是在页面内浏览,他会有一个小窗口,而转到定义是跳到他的定义页面里面。这里我们可以看到他的事件类型是EventHandler,很好这是系统内置的委托,也是标准的委托,这时候我们需要对EventHandler进行一次定义速览,看看他有什么签名:

这时候我们得到了他的签名,

然后使用匿名表达式就可以了:

() =>{}//匿名表达式长这样的
/*
*
*
*/
(参数列表)=>
{
//代码块
}

括号里面实际上是形参列表,比如Load事件,那么就是(obj,e),括号里面的变量不需要声明,只需要敲几个关键字就可以了,类型也不用声明,他和对应委托签名里面的变量类型对应的,也是按照顺序的。

花括号里面的代码是可以像平时一样写。

总结一下,匿名表达式实际上很简单,首先是参数列表,这个参数列表不能自己定义,一定要和对应的委托进行对应,有几个参数写几个,参数名可以和委托里面的重复(我经常这么干,便于记忆)但是切记,变量不能和匿名表达式不能和局部变量重名。花括号里面就是你要处理的代码。=>不能少,花括号后面有时候需要接;分号,取决于这个匿名表达式是在结尾还是在函数体里面。

下面我给出几个匿名表达式的应用例子以及应用场景

匿名表达式实际上是隐式创建一个方法体,只不过方法体的名称什么的都直接省去了,函数签名则引用对应的委托。但是匿名表达式括号里面的形参必须是未重名的,否则会出错。

(编者注:匿名表达式作为参数在方法里面,要注意换行,不然很难看,并且不建议直接在方法里面写匿名,因为很难看。亲身体验过)

C# 匿名表达式(Lambda表达式)的更多相关文章

  1. Unity C# 多态 委托 事件 匿名委托 Lambda表达式 观察者模式 .NET 框架中的委托和事件

    一.多态 里氏替换原则: 任何能用基类的地方,可以用子类代替,反过来不行.子类能够在基类的基础上增加新的行为.面向对象设计的基本原则之一. 开放封闭原则: 对扩展开放,意味着有新的需求或变化时,可以对 ...

  2. C# delegate event func action 匿名方法 lambda表达式

    delegate event action func 匿名方法 lambda表达式 delegate类似c++的函数指针,但是是类型安全的,可以指向多个函数, public delegate void ...

  3. 【Unity|C#】基础篇(9)——匿名函数 / Lambda表达式

    [学习资料] <C#图解教程>(第13章):https://www.cnblogs.com/moonache/p/7687551.html 电子书下载:https://pan.baidu. ...

  4. 匿名函数 lambda表达式(lambda expression)

    阅读g2log时,发现有两行代码居然看不懂. 1. auto bg_call =  [this, log_directory]() {return pimpl_->backgroundChang ...

  5. 18、(番外)匿名方法+lambda表达式

    概念了解: 1.什么是匿名委托(匿名方法的简单介绍.为什么要用匿名方法) 2.匿名方法的[拉姆达表达式]方法定义 3.匿名方法的调用(匿名方法的参数传递.使用过程中需要注意什么) 什么是匿名方法? 匿 ...

  6. 委托-异步调用-泛型委托-匿名方法-Lambda表达式-事件【转】

    1. 委托 From: http://www.cnblogs.com/daxnet/archive/2008/11/08/1687014.html 类是对象的抽象,而委托则可以看成是函数的抽象.一个委 ...

  7. C#多线程+委托+匿名方法+Lambda表达式

    线程 下面是百度写的: 定义英文:Thread每个正在系统上运行的程序都是一个进程.每个进程包含一到多个线程.进程也可能是整个程序或者是部分程序的动态执行.线程是一组指令的集合,或者是程序的特殊段,它 ...

  8. C#委托总结-匿名方法&Lambda表达式

    1,匿名方法 匿名方法可以在声明委托变量时初始化表达式,语法如下 之前写过这么一段代码: delegate void MyDel(string value); class Program { void ...

  9. 委托delegate 泛型委托action<> 返回值泛型委托Func<> 匿名方法 lambda表达式 的理解

    1.使用简单委托 namespace 简单委托 { class Program { //委托方法签名 delegate void MyBookDel(int a); //定义委托 static MyB ...

  10. (28)C#委托,匿名函数,lambda表达式,事件

    一.委托 委托是一种用于封装命名和匿名方法的引用类型. 把方法当参数,传给另一个方法(这么说好理解,但实际上方法不能当参数,传入的是委托类型),委托是一种引用类型,委托里包含很多方法的引用 创建的方法 ...

随机推荐

  1. [PeterDLax著泛函分析习题参考解答]第2章 线性映射

    1. 验证两个线性映射的复合仍是线性映射而且满足分配律: $$\bex {\bf M}({\bf N}+{\bf K})={\bf M}{\bf N}+{\bf M}{\bf K},\quad ({\ ...

  2. Delphi 继承基类的窗体,并显示基类的控件操作。

    1.  先建一个普通的窗体,until1 2.  先把类实现基类, 并需要实现基类需要继承的方法, 可以先不用再方法中写实现代码. TForm4 = class(TfrmmtAReportPeriod ...

  3. .NET+Oracle 分页

    http://www.cnblogs.com/Jusoc/archive/2011/08/28/2156530.html#commentform .在oracle的sqlplus或其他工具中运行一下p ...

  4. dos攻击与防御

    SYN Flood攻击 标准的TCP三次握手过程如下: 客户端发送一个包含SYN标志的TCP报文,SYN即同步(Synchronize),同步报文会指明客户端使用的端口以及TCP连接的初始序号:  服 ...

  5. Nginx+tomcat负载均衡并动静态分离

    Nginx使用正则表达式配置location,指定某些后缀的文件直接从文件路径中找(如*.jpg直接去C:/XX/XX/XX/img下找),其他的请求转发给tomcat 同时可以配置多个tomcat ...

  6. Jsp中的EL表达式

    EL表达式作用: 向浏览器输出域对象中的变量值或表达式计算的结果!!! 语法: ${变量或表达式} 可以通过page指令来设置EL表示是否启用,false是不启用,true是启用,默认是true &l ...

  7. MySQL 使用while语句向数据表中批量插入数据

    1.创建一张数据表 mysql> create table test_while ( -> id int primary key) charset = utf8; Query OK, ro ...

  8. leetCode 53.Maximum Subarray (子数组的最大和) 解题思路方法

    Maximum Subarray  Find the contiguous subarray within an array (containing at least one number) whic ...

  9. CoreJava_线程并发(堵塞队列):在某个目录下搜索含有某keyword的文件

    Java多线程编程是很考验一个程序猿水平的. 传统的WEB程序中.由于框架提供了太多的健壮性.并发性.可靠性的支持,所以我们都是将全部的注意力放到了业务实现上.我们不过依照业务逻辑的要求.不停的积累自 ...

  10. TabHost 两种使用方法 直接让一个Activity 继承TabActivity 和 利用findViwById()方法取得TagHost组件

    第一种,TabActivity 解决方案 下面建立的布局文件,它包含多个标签的显示组件 <?xml version="1.0" encoding="utf-8&qu ...