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博客

相关推荐
旖旎夜光16 分钟前
【C++ 基础入门】类和对象(上):封装、对象模型与 this 指针
开发语言·c++·笔记·学习
WEI_YANG_JU1 小时前
初中数学教学中合作学习的研究与实践
学习
码农小韩1 小时前
FPGA学习(一)——LED点灯与开发流程
学习·fpga开发·入门·环境配置·仿真·点灯
李长渊哦2 小时前
Qoder 自定义子智能体(Subagent)学习笔记
chrome·笔记·学习
代码山河3 小时前
基本类型转换:自动类型转换与强制类型转换
java·学习·架构·教程·面向对象·项目
旖旎夜光3 小时前
【C++ 基础入门】命名空间、输入输出、缺省参数与函数重载
开发语言·c++·笔记·学习
m4Rk_4 小时前
【论文阅读】Agent 记忆机制(119):EvoLife——让具身 Agent 把主动问到的答案沉淀为可复用的空间经验
论文阅读·人工智能·学习·开源·github
淡海水4 小时前
10-01-互操作-C#与C++边界的内存管理
unity·c#·游戏引擎·.netcore·gc
程序猿乐锅4 小时前
万字详解Single-flight(单飞模式)
java·开发语言·分布式·后端·学习·single-flight
赵谨言6 小时前
多语种在线语言学习平台LinguaVerse的设计与实现毕业论文
学习