一 匿名方法的介绍
     匿名方法是为了简化委托的实现,方便调用委托方法而出现的,同时,匿名方法也是学好lambda表达式的基础。在委托调用的方法中,如果方法只被调用一次,这个时候我们就没有必要创建具名方法,从而用匿名方法更为方便。
二 匿名方法的使用场景
  1 声明委托变量时作为初始化表达式
  2 组合委托时赋值语句的右边
  3 为委托增加事件时赋值语句的右边
三 匿名方法的定义
  匿名方法是在初始化委托时内联声明的方法
  Delegate (参数列表){语句块}
(一)返回值

匿名方法不会显示声明返回值。如果委托有void类型的返回值,匿名方法就不能有返回值

(二)参数
  以下情况,我们可以使圆括号为空或省略圆括号来简化匿名方法的参数列表(两项同时成立)
  1 委托的参数列表不包含任何out参数
  2 匿名方法不使用任何参数
(三)params参数
  如果声明委托的参数列表包含了params参数,那么params关键字在匿名方法的参数列表中就会被省略
四 匿名方法的变量和参数的作用域
 1 参数以及声明在匿名方法内部的局部变量的作用域限制在实现方法的主体之内
 2 与委托的具名方法不同,匿名方法可以访问它们外围作用域的局部变量和环境,方法中的代码可以访问外围变量并且输入它

五 lambda表达式简介

     lambda表达式是比匿名方法更简洁的一种匿名方法语法。

lambda运算符:所有的lambda表达式都是用新的lambda运算符 " => ",可以叫它,“转到”或者 “成为”。运算符将表达式分为两部分,左边指定输入参数,右边是lambda的主体。

lambda表达式:

1.一个参数:param=>expr

2.多个参数:(param-list)=>expr

六 匿名方法转换为lambda表达式的步骤

   1 删除delegate关键字

2 在参数列表和匿名方法主体之间放lambda运算符=>.lambda运算符读作goes to

七 简化lambda表达式

1 编译器还可以从委托的声明中知道委托参数的类型,因此lambda表达式允许我们省略类型参数。

带有类型的参数列表称为显示类型

省略类型的参数列表称为隐式类型

2 如果只有一个隐式类型参数,我们可以省略周围的括号

3 lambda表达式允许表达式的主体是语句块或者表达式。如果语句块包含了一个返回语句,我们可以将语句块替换为return关键字后的表达式(即 去掉关键字return)

八 例子:

namespace 匿名方法和lambad表达式
{
delegate int MyDelegate(int x); //声明一个委托
class Program
{
public static int Add(int x) //实现委托的方法
{
return x + 20;
}
static void Main(string[] args)
{
MyDelegate del = delegate (int x){ return x + 20;};//匿名方法
MyDelegate del1 = (int x) =>{ return x + 20; }; //lambad表达式 变形1:去掉delegate关键字

MyDelegate del2 = (x) => { return x + 20; }; //lambad表达式 变形2:去掉参数类型
MyDelegate del3 = x => x + 20; //lambad表达式 变形3:去掉参数括号和return关键字
Console.WriteLine("两个数的和为{0}", del3(20)); Console.ReadLine();
}
}
}

九 lambda表达式的注意事项

进阶系列(8)——匿名方法与lambda表达式的更多相关文章

  1. 从匿名方法到 Lambda 表达式的推演过程

    Lambda 表达式是一种可用于创建委托或表达式目录树类型的匿名函数. 通过使用 lambda 表达式,可以写入可作为参数传递或作为函数调用值返回的本地函数. 以上是msdn官网对Lambda 表达式 ...

  2. 委托学习笔记后续:泛型委托及委托中所涉及到匿名方法、Lambda表达式

    引言: 最初学习c#时,感觉委托.事件这块很难,其中在学习的过程中还写了一篇学习笔记:委托.事件学习笔记.今天重新温故委托.事件,并且把最近学习到和委托相关的匿名方法.Lambda表达式及泛型委托记录 ...

  3. C# 从CIL代码了解委托,匿名方法,Lambda 表达式和闭包本质

    前言 C# 3.0 引入了 Lambda 表达式,程序员们很快就开始习惯并爱上这种简洁并极具表达力的函数式编程特性. 本着知其然,还要知其所以然的学习态度,笔者不禁想到了几个问题. (1)匿名函数(匿 ...

  4. 委托、匿名方法、Lambda表达式的演进

    摘自:"http://www.cnblogs.com/eagle1986/archive/2012/01/19/2327358.html 假设给我们一个泛型对象List<T>,T ...

  5. 匿名方法,Lambda表达式,高阶函数

    原文:匿名方法,Lambda表达式,高阶函数 匿名方法 c#2.0引入匿名方法,不必创建单独的方法,因此减少了所需的编码系统开销. 常用于将委托和匿名方法关联,例如1. 使用委托和方法关联: this ...

  6. Fun<>,匿名方法,Lambda表达式 冒泡排序C#

    大头文 分享,进步 冒泡排序C#实现,使用委托,包括三种方式:Fun<>,匿名方法,Lambda表达式 冒泡排序是一种简单的排序方法,适合于小量数字排序,对于大量数字(超过10个),还有更 ...

  7. 泛型委托及委托中所涉及到匿名方法、Lambda表达式

    泛型委托及委托中所涉及到匿名方法.Lambda表达式 引言: 最初学习c#时,感觉委托.事件这块很难,其中在学习的过程中还写了一篇学习笔记:委托.事件学习笔记.今天重新温故委托.事件,并且把最近学习到 ...

  8. .NET Framework System.Array.Sort 数组类,加深对 IComparer、IComparable 以及泛型委托、匿名方法、Lambda 表达式的理解

    本文内容 自定义类 Array.Sort 参考资料 System.Array.Sort 有很多对集合的操作,比如排序,查找,克隆等等,你可以利用这个类加深对 IComparer.IComparable ...

  9. C#中分别对委托、匿名方法、Lambda表达式、Lambda表达式树以及反射执行同一方法的过程进行比较。

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

随机推荐

  1. node 借助Node Binary管理模块“n”更新

    Node.js的版本频繁变化,如果有模块不能在你当前的Node版本上使用,需要升级Node环境 1)首先:查看当前node版本:node –v 2)安装n模块:npm install -g n 3)检 ...

  2. Flume(5)-Ganglia监控

    一. 安装Ganglia 1. 安装httpd服务与php sudo yum -y install httpd php 2. 安装其他依赖 sudo yum -y install rrdtool pe ...

  3. mysql5.6搭建主从复制

    使用MySQL 5.6,搭建主从复制.关于5.6的安装,可以参考<MySQL 5.6 rpm安装方法和碰见的问题>.   主库创建slave用户,设置复制权限, mysql> cre ...

  4. 20155220 2016-2017-2 《Java程序设计》第八周学习总结

    20155220 2016-2017-2 <Java程序设计>第八周学习总结 教材学习内容总结 第14章 NIO与NIO2 NIO简介 NIO使用频道来衔接数据结点,在处理数据时,NIO可 ...

  5. 20155233 2016-2017-2 《Java程序设计》第1周学习总结

    20155233 2016-2017-2 <Java程序设计>第1周学习总结 教材学习内容总结 本周主要学习教材的第一章.第二章,了解了Java的发展历程,最基本的Java环境的搭建,以及 ...

  6. 20155236 《Java程序设计》实验三(敏捷开发与XP实践)实验报告

    20155236 <Java程序设计>实验三(敏捷开发与XP实践)实验报告 一.实验内容及步骤 XP基础 XP核心实践 相关工具 实验内容 1.在IDEA中使用工具(Code->Re ...

  7. 20155332 如何获取新技能+c语言学习调查

    如何获取新技能+c语言学习调查 你有什么技能比大多人(超过90%以上)更好? 如果问我有没有什么技能比大多数人,并且是90%的人好,我还真不敢说有,因为世界上有70亿人,要比63亿人做的好才行啊.我也 ...

  8. 分块算法&BZOJ2002

    题目传送门 第一次接触分块...... 分块查找是折半查找和顺序查找的一种改进方法,分块查找由于只要求索引表是有序的,对块内节点没有排序要求,因此特别适合于节点动态变化的情况. 分块修改理论复杂度为O ...

  9. POJ1035_Spell checker_KEY

    题目传送门 一道暴力可以过的水题.(直接暴力模拟的那种) 但是我打Trie练练模板,但是TMD因为数组开太小卡了好久. code: #include <cstdio> #include & ...

  10. 使GDAL库支持中文路径或中文文件名的处理方法

    之前生成的gdal 2.1.1动态库,在通过命令行执行时,遇到有中文路径或中文图像名时,GDALOpen函数不能正确的被调用,如下图: 解决方法: 1.      在所有使用GDALAllRegist ...