网站首页 > 文章精选 正文
1什么是Lambda
"Lambda表达式"是一个匿名函数,是一种高效的类似于函数式编程的表达式,Lambda简化了开发中需要编写的代码量。它可以包含表达式和语句,并且可用于创建委托或表达式目录树类型,支持带有可绑定到委托或表达式树的输入参数的内联表达式。
基本上所有的面向对象语言都有Lambda函数,这里简单的以C#为例子
2、Lambda的格式
2.1简单格式
XX => XXX
- 所有Lambda表达式都使用Lambda运算符=>,该运算符读作"goes to"。
- Lambda运算符的左边是输入参数(如果有),右边是表达式或语句块。
- Lambda表达式x => x * x读作"x goes to x times x"。形如(参数)=>{操作}。
2.2不同参数的Lambda
(1)不同参数Lambda的格式如下图所示
(2)无参数
() =>{return "1"; };
等同于
string getnum(){ return "1"; }
(3)有两个参数
(p1, p2) =>{ return p1*p2;};
等同于
int mul(p1, p2) { return p1*p2;};
3、Lambda和委托
3.1原始委托用法
(1)根据委托的定义,简单描述的例子如下所示
class Demo
{
delegate void DemoDelegate(string m_str1,int i);
static void Chen_tes1(string m_str,int i)
{
Console.WriteLine("原始格式1: "+m_str);
}
static void Main(string[] args)
{
DemoDelegate demoDelegate = new DemoDelegate(Chen_tes1);
demoDelegate.Invoke("chen", 1);
}
}
输出为:
3.2不停简化的委托格式
class Demo
{
delegate void DemoDelegate(string m_str1, int i);
static void Chen_tes1(string m_str, int i)
{
Console.WriteLine("原始格式: " + m_str);
}
static void Main(string[] args)
{
//(1)最原始
DemoDelegate demoDelegate1 = new DemoDelegate(Chen_tes1);
//(2)简化1--去除void Chen_tes1函数定义
DemoDelegate demoDelegate2 = new DemoDelegate(
delegate (string m_str, int i) {Console.WriteLine("简化格式1: " + m_str);}
);
//(3)简化2--去除 new DemoDelegate
DemoDelegate demoDelegate3 = delegate (string m_str, int i) { Console.WriteLine("简化格式2: " + m_str); };
//(4)简化3--delegate去掉后,换上了一个符号“=>”,读作:goes to
DemoDelegate demoDelegate4 = (string m_str, int i) =>{ Console.WriteLine("简化格式3: " + m_str); };
//(5)简化4--因为与委托类型是一一对应关系,所以直接去掉参数类型名称
DemoDelegate demoDelegate5 = (m_str, i) => { Console.WriteLine("简化格式4: " + m_str); };
//(6)简化5--只有一行代码,花括号{}去掉
DemoDelegate demoDelegate6 = (m_str, i) => Console.WriteLine("简化格式5: " + m_str);
demoDelegate1.Invoke("chen", 1);
demoDelegate2.Invoke("chen", 1);
demoDelegate3.Invoke("chen", 1);
demoDelegate4.Invoke("chen", 1);
demoDelegate5.Invoke("chen", 1);
demoDelegate6.Invoke("chen", 1);
}
}
运行结果
猜你喜欢
- 2025-06-03 2、Java面向对象编程思想(超详细)
- 2025-06-03 信息系统项目管理师综合知识:面向对象方法
- 2025-06-03 canvas学习和面向对象(二)(canvas详解)
- 2025-06-03 python进阶突破面向对象——四大支柱
- 2025-06-03 Swift 面向对象解析(一)(swift 面向协议编程)
- 2025-06-03 简述JS面向对象编程(个人理解,简易版)
- 2025-06-03 软考系规:面向对象系统分析与设计详解
- 2025-06-03 Python基础篇-面向对象编程(python 面向对象知乎)
- 2025-06-03 此继承非彼继承,今天说的是面向对象的基本特征之一
- 2025-06-03 一张图深入解析面向对象常见概念,秒懂
- 最近发表
-
- 面试中常被问到的Hash表,你了解吗
- JAVA面试考点:一文搞懂一致性Hash的原理和实现
- 一次性搞清楚equals和hashCode(hashcode() 与equals()区别,简单说明)
- HashMap.Key的故事:Key为什么出现Hash碰撞及冲突呢?
- hash冲突的几种解决方案对比(hash冲突的解决方式)
- 游戏王LN 无头骑士(无头骑士cv)
- Linux ln、unlink命令用法(linux link命令详解)
- n和l分不清矫正发音方法,这三步就够了
- golang引用私有gitlab项目代码(golang引入当前包下的文件)
- Instamic:录音领域中的 GoPro,让你想录就录,随心所欲
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)
- mysql数据库面试题 (57)