C# lambda表达式与匿名方法
文章目录
- 匿名方法
- Lambda表达式
- 实例
- 实例
|
C#中的匿名方法是在C#2.0引入的,它终结了声明委托的唯一方法是使用命名方法的时代。在C#更高版本中,Lambda表达式取代了匿名方法,作为编写内联代码的首选方式。但是,匿名方法的信息同样也适用Lambda表达式,可以说Lambda表达式就是匿名方法演变过来的。匿名方法可以用来忽略参数列表,可以转化为具有各种签名的委托,而这对于Lambda表达式来说是不可能的。
匿名方法
要将代码块传递为委托参数,创建匿名方法则是唯一的方法。匿名方法就是为了将代码块传递为委托参数,因此也有人将其称为匿名委托。使用C#匿名方法可以使委托及事件的代码编写更加精简、高效。一般情况下,事件注册事件处理方法,需要首先定义这个方法,如果该方法仅用于订阅特定的事件,则可使用代码更加简明的匿名方法。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace test
{class Program{static void Main(string[] args){Heater heater = new Heater();heater.BoilEvent += delegate(int param){Console.WriteLine("Alarm:dididid,水已经{0}℃了", param);};heater.BoilEvent += delegate(int param){Console.WriteLine("Display:水快开了,当前温度为:{0}℃", param);};heater.BoilWater();Console.ReadKey();}}public class Heater{private int temperature;//水温public delegate void BoilHandle(int x);//声明关于事件的委托public event BoilHandle BoilEvent;//声明水要烧开的事件public void BoilWater(){ //烧水的方法for (int i = 0; i <= 100; i++){temperature = i;if (temperature > 96){if (BoilEvent != null){BoilEvent(temperature);}}}}}}
运行结果
Lambda表达式
Lambda表达式是一种可用于创建委托或表达式目录树类型的匿名函数。通过使用lambda表达式,可以写入可作为参数传递或作为参数传递或作为函数调用值返回的本地函数。Lambda表达式对于编写LINQ查询表达式特别有用。若要创建Lambda表达式,需要在Lambda运算符=>
左侧指定输入参数,然后在另一侧输入表达式或语句块。
实例
lambda表达式x=>x*x
指定名为x
的参数并返回x
的平方值。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;namespace test
{class Program{static void Main(string[] args){Expression<del> myET = x => x * x;Console.ReadKey();}}
}
委托签名具有一个int
类型的隐式类型输入参数,并返回int
。可以将lambda表达式转换为该类型的委托,因为该表达式也具有一个输入参数(x
),以及一个编译器可隐式转换为int
型的返回值。
表达式位于=>
运算符右侧的lambda表达式称为lambda表达式
。表达式lambda广泛用于C#的表达式树的构造。表达式lambda会返回表达式的结果。
实例
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;namespace test
{class Program{public delegate bool ShortDelegate(int[] x);static void Main(string[] args){int[] arr = new int[] { 8, 4, 5, 6, 2, 1, 3, 7, 9, 0 };Console.WriteLine("未排序前数组序列为:");foreach (int i in arr){Console.Write("{0},", i);}ShortDelegate MyDelegate = array => {for (int i = array.GetUpperBound(0); i >= 0; i--)//循环从后向前分别取出数组中的一个元素{//冒泡排序,将数值小的元素移到后面,直到所有的元素按照降序排列for (int j = 0; j <= i; j++){if (array[j] <= array[i]){//交换两个元素位置int z = array[j];array[j] = array[i];array[i] = z;}}}return true;};MyDelegate(arr);//调用委托排序Console.WriteLine("\n排序后数组序列为:");foreach (int i in arr){Console.Write("{0},", i);}Console.ReadKey();}}}
运行结果:
------------------------------------------------------------------------------------------分割线
------------------------------------------------------------------------------------------
|
|
C# lambda表达式与匿名方法相关推荐
- Lambda表达式替代匿名方法
使用Lambda表达式,"=>"之前为参数列表,如果有多个参数,则不能省略括号,比如:(s,e)=>.... 如果方法有返回值,并且处理代码只有一行,可以简写成i=&g ...
- python lambda表达式的使用方法(匿名函数)
文章目录 lambda函数简介 示例1:将存有文件名的字符串列表,运用正则表达式方法提取文件名中的数字,按照数字大小将文件名字符串列表重新排序 示例2:将存有hsv颜色空间的颜色元组列表,转换成rgb ...
- lambda表达式或者匿名函数中为什么要求外部变量为final
1.参考博客 关于Lambda表达式里面修改外部变量问题 JDK8之前,匿名内部类访问的局部变量为什么必须要用final修饰 2.匿名内部类 在jdk7之前,匿名内部类访问外部类的局部变量时,那么这个 ...
- 深入理解Java Lambda表达式,匿名函数,闭包
前言 对于Lambda表达式一直是知其然不知其所以然,为了搞清楚什么是Lambda表达式,以及Lambda表达式的用法和作用,本文应运而生当做学习笔记分享出来,欢迎指正交流. 什么是Lambda 让我 ...
- lambda表达式方法泛型_模板方法模式–使用Lambda表达式,默认方法
lambda表达式方法泛型 模板方法模式是Erich Gamma,Richard Helm,Ralph Johnson和John Vlissides在著名的< 设计模式>一书中解释的23种 ...
- 模板方法模式–使用Lambda表达式,默认方法
模板方法模式是Erich Gamma,Richard Helm,Ralph Johnson和John Vlissides在著名的< 设计模式>一书中解释的23种设计模式之一. 这种模式的意 ...
- Lambda表达式接口更新方法引用函数式接口Stream流
Lambda表达式&接口更新&方法引用&函数式接口&Stream流 Lambda 1.程序启动三种不同的表现形式 2.Lambda表达式的标准格式 3.练习 Lambd ...
- Python中lambda表达式_匿名函数
lambda表达式和匿名函数 lambda表达式 lambda表达式可以用来声明匿名函数,实际生成一个函数对象. lambda表达式只允许包含一个表达式,该表达式的计算结果就是函数的返回值. ...
- Lambda表达式实现匿名类
@cx天王盖地虎 Lambda表达式实现匿名类 比如我们要为控件添加时间监听器,常规的步骤是: 1.创建一个实现了ActionListener接口的内部类,并将其添加到按钮: //按钮控件JButto ...
最新文章
- 2011 ScrumGathering敏捷个人.pptx
- 各个级别镜像之间的跳转模型
- QT的QGraphicsView类的使用
- 几款流行的HTML5 UI 框架比较
- 【B】替换 Quartz.net 默认使用的 MySql.Data 为 Mysqlconnector 的学习过程
- 浅谈Windows下SVN在Android Studio中的配置、基本使用及解除关联
- leetcode 打印_剑指 Offer 总结 - leetcode 剑指offer系列
- 带你自学Python系列(九):一文读懂Python中字典应用原理!
- Android开发之APN网络切换
- srpm包的编译方式
- 【Hadoop篇】--Hadoop常用命令总结
- python调用usb摄像头黑屏_ORB-SLAM2编译安装和USB摄像头例程运行
- pt-osc全解pt-online-schema-change
- python自动化学习之语法学习(判断语句和循环语句)
- Spring AOP 实现用户权限验证
- cygwin--简单备忘
- java 求百分比_java中计算百分比
- playsound报错
- 解压压缩包的时候要求输入密码
- android 所有运行程序闪退,Android开发,运行app闪退的解决方法