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

相关推荐
幼儿园老大*1 小时前
走进 Go 语言基础语法
开发语言·后端·学习·golang·go
1 小时前
开源竞争-数据驱动成长-11/05-大专生的思考
人工智能·笔记·学习·算法·机器学习
ctrey_1 小时前
2024-11-4 学习人工智能的Day21 openCV(3)
人工智能·opencv·学习
啦啦右一1 小时前
前端 | MYTED单篇TED词汇学习功能优化
前端·学习
霍格沃兹测试开发学社测试人社区2 小时前
软件测试学习笔记丨Flask操作数据库-数据库和表的管理
软件测试·笔记·测试开发·学习·flask
今天我又学废了2 小时前
Scala学习记录,List
学习
王俊山IT2 小时前
C++学习笔记----10、模块、头文件及各种主题(一)---- 模块(5)
开发语言·c++·笔记·学习
Mephisto.java3 小时前
【大数据学习 | kafka高级部分】kafka中的选举机制
大数据·学习·kafka
南宫生4 小时前
贪心算法习题其三【力扣】【算法学习day.20】
java·数据结构·学习·算法·leetcode·贪心算法
武子康5 小时前
大数据-212 数据挖掘 机器学习理论 - 无监督学习算法 KMeans 基本原理 簇内误差平方和
大数据·人工智能·学习·算法·机器学习·数据挖掘