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

相关推荐
酷炫码神2 分钟前
C#运算符
开发语言·c#
圈圈编码6 分钟前
MVVM框架
android·学习·kotlin
zybsjn1 小时前
后端系统做国际化改造,生成多语言包
java·python·c#
敲代码的 蜡笔小新2 小时前
【行为型之迭代器模式】游戏开发实战——Unity高效集合遍历与场景管理的架构精髓
unity·设计模式·c#·迭代器模式
关于不上作者榜就原神启动那件事2 小时前
Java基础学习
java·开发语言·学习
yc_12242 小时前
SqlHelper 实现类,支持多数据库,提供异步操作、自动重试、事务、存储过程、分页、缓存等功能。
数据库·c#
小黑_深呼吸3 小时前
Prometheus实战教程:k8s平台-Mysql监控案例
运维·学习·kubernetes·prometheus
Kookoos3 小时前
Redis + ABP vNext 构建分布式高可用缓存架构
redis·分布式·缓存·架构·c#·.net
小李不想说话3 小时前
HTTPS 加密原理
java·网络·网络协议·学习·安全·http·https
秋野酱4 小时前
基于javaweb的SpringBoot驾校预约学习系统设计与实现(源码+文档+部署讲解)
spring boot·后端·学习