一:匿名方法:

《1》:定义:
匿名方法(Anonymous methods) 提供了一种传递代码块作为委托参数的技术。匿名方法是没有名称只有主体的方法。
在匿名方法中您不需要指定返回类型,它是从方法主体内的return语句推断的。
《2》:匿名方法的使用:
匿名方法是通过使用delegate关键字创建委托实例来声明的。
无返回值无参的方法:

class Program{delegate void Del();    //先定义一个无返回值无参数的委托static void Main(string[] args){Del del = delegate ()     //无返回值无参数的匿名方法{Console.WriteLine("你长得真好看");};del();Console.ReadLine();}}


无返回值有参的方法:

class Program{delegate void Delet(string str, int i);     //定义一个无返回值有参数的委托static void Main(string[] args){       Delet delet = delegate (string str,int i) //无返回值有参数的匿名方法{Console.WriteLine(str + "的年龄是:" + i);};delet("王五",30);Console.ReadLine();}}


有返回值有参的方法:

class Program{delegate string Dele(string str,int i);    //定义一个有返回值有参数的委托static void Main(string[] args){Dele dele = delegate (string str,int i)   //有返回值类型的匿名方法{return str + "的年龄是:" + i;};Console.WriteLine(dele("小张",20));    Console.ReadLine();}}


系统委托匿名函数

Console.WriteLine(dele("小张",20));Action<string, int> action = delegate (string str,int i)    //无返回值有参数的匿名方法{Console.WriteLine(str + "的年龄是:" + i);};action("小明", 20);

Func<string, int, string> func = delegate (string str,int i)   //有返回值有参数的匿名方法{return str + "的年龄是:" + i;};Console.WriteLine(func("小丽",27));


《3》:作用
可以使用匿名函数来初始化命名委托[无需取名字的委托],或传递命名委托(而不是命名委托类型,传递一个方法块,而不是委托类型)[callback的方式]作为方法参数。

二.Lambda表达式

《1》:定义:
Lambda表达式是一种可用于创建委托或表达式目录树类型的匿名函数。通过使用lambda表达式,可以写入可作为参数传递或作为函数调用值返回的本地函数。
从C#3.0开始,可以使用Lambda表达式代替匿名方法。只要有委托参数类型的地方就可以使用Lambda表达式
《2》:声明:
Lambda运算符“=>”的左边列出了需要的参数,如果是一个参数可以直接写a=>(参数名自己定义),如果多个参数就使用括号括起来,参数之间以逗号间隔

static void Main(string[] args){Action action = () =>     //无返回值无参数的匿名方法的表达式{Console.WriteLine("你长得真好看");};action();Action<string> action1 = (str) => //无返回值有参数的匿名方法的表达式{Console.WriteLine(str+"你好");};action1("小明");Action<string, int> action2 = (str, i) =>    {Console.WriteLine(str + "的年龄是:" + i);};action2("王麻子",30);Func< int, string,string> func = (i,str) => //有返回值有参数的匿名方法的表达式{return str + "的年龄是:" + i;};Console.WriteLine(func(20,"张三"));Console.ReadLine();}


(1):如果Lambda表达式只有一条语句,在方法快内就不需要大括号和return语句,编译器会自动添加return语句,如果Lambda表达式的实现代码中需要多条语句,就必须添加大括号和return语句。

 Action<string, int> atc2 = (str, i) => Console.WriteLine(str + "今年" + i + "岁");atc2("小明", 12);Func<int, string> fun = i => "输入的数字是" + i;Console.WriteLine(fun(100));

(2):通过Lambda表达式可以访问Lambda表达式块外部的变量。这是一个非常好的功能,但如果不能正确使用,也会非常危险。

int somVal = 5;Func<int,int> f = x=>x+somVal;Console.WriteLine(f(3));//8somVal = 7;Console.WriteLine(f(3));//10

(3):这个方法的结果,不但受到参数的控制,还受到somVal变量的控制,结果不可控,容易出现编程问题,用的时候要谨慎
《3》:表达式的作用:
1.Lambda表达式是一种匿名方法。匿名方法可省略参数列表,Lambda表达式不能省略参数列表的圆括号()
2.发展:委托 → 匿名方法 → lambda表达式 → 泛型委托 → 表达式树

匿名方法和Lambda表达式相关推荐

  1. C#中的委托,匿名方法和Lambda表达式

    简介在.NET中,委托,匿名方法和Lambda表达式很容易发生混淆.我想下面的代码能证实这点.下面哪一个First会被编译?哪一个会返回我们需要的结果?即Customer.ID=5.答案是6个Firs ...

  2. [深入学习C#]LINQ查询表达式详解(1)——基本语法、使用扩展方法和Lambda表达式简化LINQ查询

    此文章非原创,转载自诗人江湖老,原文地址 在Git上下载源码 在工程中我们少不了要定义类或者结构去储存数据,这些数据将被临时地储存在内存中,现在我们想要对其完成一些类似于查找.过滤等等常见的任务的时候 ...

  3. JAVA 8 接口中的默认方法和Lambda 表达式基本使用

    一.接口中的默认方法 在JDK1.8之前,interface之中可以定义变量和方法,变量必须是public.static.final的,方法必须是public.abstract的 在JDK 1.8开始 ...

  4. java 8 lambda reduce_java8种的reduce方法和lambda表达式结合使用

    今天碰到了java8种的reduce方法,查了资料之后写一些总结,以免自己以后用到. 计算1,2,3,4,5 的和,并且初始值为3 也就是计算3+1+2+3+4+5 1.使用Stream 两个参数的r ...

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

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

  6. Java 回调函数(传统方法和lambda方法)-一个例子秒懂

    原文地址为: Java 回调函数(传统方法和lambda方法)-一个例子秒懂 背景: 想写一个工具类 Tool.java ,其中方法 public void readOneLine() 负责一行一行地 ...

  7. C#语法之匿名函数和Lambda表达式

    上一篇博客主要是对委托和事件做了一小结,这篇是在上一篇博客的基础上对匿名函数和Lambda表达式小结.还是接着上一篇说起,在上一篇中也说了委托是一种数据结构,主要是解决让函数作为参数的问题.在使用委托 ...

  8. C# 委托、匿名委托、Lambda表达式详解

    文章目录 委托 委托概述 声明委托类型 创建委托对象 给委托赋值 组合委托 为委托添加方法 从委托移除方法 调用委托 委托的示例 调用带有返回值的委托 调用带有引用参数的委托 匿名方法 使用匿名方法 ...

  9. C# 匿名委托、匿名方法、匿名对象、Lambda表达式

    C# 匿名委托.匿名方法.匿名对象.Lambda表达式 原文:C# 匿名委托.匿名方法.匿名对象.Lambda表达式 一.匿名类型 可通过使用 new 运算符和对象初始值创建匿名类型. 示例: var ...

  10. Java 8:将匿名类转换为Lambda表达式

    将匿名类(实现一种方法)重构为lambda表达式,可使您的代码更简洁明了. 例如,这是Runnable及其lambda等效项的匿名类: // using an anonymous class Runn ...

最新文章

  1. python怎么判断是不是列表_python判断变量是否为int、字符串、列表、元组、字典等方法...
  2. 新版ffmpeg PCM编码到AAC,swr_convert转换采样精度,稍微修改兼容PCM编码为G711A及MP3,记录下。
  3. eclipse中的感叹号和x号解决方法
  4. 获得变量的名称获得传入参数的参数类型与堆栈中的函数名获得变量的名称
  5. mysql workbench启动_怎么启动mysql workbench
  6. 数学国里有座天才云集的“疯人院”
  7. 2.18比赛(T2,T3留坑)
  8. 《精通自动化测试框架设计》—第2章 2.6节使用数据库
  9. 基于JAVA+SpringMVC+Mybatis+MYSQL的课堂考勤系统
  10. linux声卡测试命令,linux添加声卡驱动使用命令行音频播放器的方法
  11. 线性代数笔记 -- A = LU的应用
  12. placeholder在不同浏览器下的表现及兼容方法 placeholder兼容
  13. 由于磁盘坏道导致的系统卡顿令我抓狂
  14. Android应用中打开百度地图、高德地图、网页版百度地图
  15. hhkb mac设置_HHKB 纯小白入坑指南
  16. 江瀚新材登陆上交所主板:募资约24亿元,甘书官父子为实际控制人
  17. 计算机与通信网络潘书文答案,计算机与通信网络潘书文答案
  18. 区块链平台Coursera(第四周)替代去中心化解决方案
  19. QMS-云质-质量管理软件-西门子MES里面有质量模块,为什么还要收购质量软件-IBS?
  20. 工作中的遇到的命令备忘录

热门文章

  1. android绘制立方体带坐标,Android: 直接在bitmap上绘制一个立方体
  2. Katana如何渲染序列
  3. 【转】ADW_Launcher
  4. 使用DragonFly进行智能镜像分发
  5. 开发人员如何规划自己的职业生涯
  6. 设置windows补丁自动更新指向固定服务器
  7. mysql按键精灵接口,mysql,按键精灵,读取写入
  8. 上海 云海服务器管理中心,云海InCloud Manager构建融合数据中心
  9. 利用接口检查日期是否为法定节假日
  10. Chrome手势插件