C#学习相关系列之匿名方法和Lambda表达式

一、匿名方法的定义

匿名方法 顾名思义就是这类方法的特点是不需要特别去定义函数的名字的。一般我们需要一个函数,但又不想花时间去命名它的时候,就可以使用匿名方法。在 C# 中, 匿名方法通常表现为使用 delegate 运算符和 Lambda 表达式。(Lambda 表达式 的本质也是++匿名方法++ 。Lambda 表达式提供了一种简洁和富有表现力的方式来创建匿名函数,可以使用 => 运算符来构造 Lambda 表达式。)

Func和Action是两种泛型委托,两者都可以传入参数,但Func是有返回值的,而Action是无返回值的操作,下面主要根据这两种匿名委托讲解一下匿名方法和Lambda的用法。

二、匿名方法和Lambda的使用形式

cs 复制代码
1、对于Action表达式
//有参传递,传入int类型a,b后计算a+b

匿名方法:Action<int,int> test=delegate(int a,int,b){int c=a+b;}
lambda表达式 Action<int,int> test=(a,b)=>{int c=a+b;}

//无参传递

匿名方法:Action test=delegate(){int a=5;int b=10;int c=a+b;}
lambda表达式 Action test=()=>{int a=5;int b=10;int c=a+b;}

2、对于Func表达式
//有参传递,传入int类型a,b后返回计算a+b结果

匿名方法:Func<int,int,int> test=delegate(int a,int,b){return a+b;}
lambda表达式 Func<int,int,int> test=(a,b)=>{return a+b;}

//无参传递

匿名方法:Func<int>test=delegate(){int a=5;int b=10;return a+b;}
lambda表达式 Func<int>test=()=>{int a=5;int b=10;return a+b;}

提示:本人准备建立一个技术交流群,会将日常学习工作中遇到的问题和解决方案进行分享,同时也会将代码和学习资料上传进去,有什么不懂的问题可以咨询我!+v:SJS66-12

生活所迫打个广告,本人也代购莆田鞋,不是中间商,工厂直接取货,价格优惠质量保证,都是我自己前去挑选,可以视频选购验货!!希望大家支持!!!赚点生活费!!!+v:SJS66-12

三、使用技巧

1.使用 delegate 运算符时,也可以++直接省略参数列表++,表示创建的匿名方法可以转换为具有任何参数列表的委托类型。(当方法中参数在返回的结果没有任何作用时,就可以使用弃元。)

cs 复制代码
Action greet = delegate { Console.WriteLine("你好!"); };
greet();

Action<int, double> introduce = delegate { Console.WriteLine("这就是世界!"); };
introduce(7, 2.5);


Func<int, int, int> constant = delegate (int _, int _) { return 42; };
Console.WriteLine(constant(3, 4));  

// 输出:42

2.当传入的参数只有一个时,可以省略传入参数的小括号,当运行语句只有一句时,可以省略中括号如:

cs 复制代码
Action<int> test=a=>console.writeLine(a);

编写 lambda 时,通常不必为输入参数指定类型,因为编译器可以根据 lambda 主体、参数类型以及 C# 语言规范中描述的其他因素来推断类型。

Lambda表达式常用场景是Linq查找和与委托相关的

参考文献:【C#进阶】C# 匿名方法-CSDN博客

Lambda表达式详解(C#)_c# lambda表达式详解_草原上唱山歌的博客-CSDN博客

相关推荐
虾球xz4 分钟前
游戏引擎学习第59天
学习·游戏引擎
枫零NET31 分钟前
学习思考:一日三问(学习篇)之匹配VLAN
网络·学习·交换机
沐泽Mu1 小时前
嵌入式学习-QT-Day07
c++·qt·学习·命令模式
沐泽Mu1 小时前
嵌入式学习-QT-Day09
开发语言·qt·学习
炸毛的飞鼠1 小时前
汇编语言学习
笔记·学习
egekm_sefg2 小时前
webrtc学习----前端推流拉流,局域网socket版,一对多
前端·学习·webrtc
m0_748241702 小时前
前端学习:从零开始做一个前端开源项目
前端·学习·开源
吾与谁归in3 小时前
【C#联合halcon实现绘制ROI功能】
c#·halcon·roi
啊哈哈哈哈哈啊哈哈4 小时前
P7——pytorch马铃薯病害识别
人工智能·深度学习·学习