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

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

一、匿名方法的定义

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

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

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

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>前两个是传入参数的类型,最后一个是Func的返回值类型
匿名方法: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;}


三、使用技巧

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

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.当传入的参数只有一个时,可以省略传入参数的小括号,当运行语句只有一句时,可以省略中括号如:

Action<int> test=a=>console.writeLine(a);

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

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


相关文章
|
1天前
|
数据采集 前端开发 数据挖掘
Fizzler库+C#:从微博抓取热点的最简单方法
本文介绍如何使用Fizzler库和C#构建微博热点信息爬虫。通过Fizzler的CSS选择器定位关键信息,提取热点标题和排名,实现微博内容的智能挖掘。示例代码展示单线程和多线程采集方法,并涉及代理IP使用。
Fizzler库+C#:从微博抓取热点的最简单方法
|
2天前
|
存储 数据采集 API
C# GetField 方法应用实例
C# GetField 方法应用实例
|
2天前
|
JSON 安全 API
C# GetMethod 方法应用实例
C# GetMethod 方法应用实例
|
18天前
|
设计模式 IDE 测试技术
提升 C#编程效率的技巧与方法
【4月更文挑战第20天】提升C#编程效率的关键技巧包括:选择合适的IDE(如Visual Studio)、掌握基础语法、规划良好代码结构、使用代码生成工具、复用代码、利用库和框架、定期重构、应用设计模式、避免过度设计、进行代码审查、自动化测试、学习新技术、养成良好编程习惯、定期备份代码及参与技术社区。通过这些方法,开发者能提高代码质量和开发效率。
|
1月前
|
C#
C# Dev TreeList常用属性方法
C# Dev TreeList常用属性方法
|
17天前
|
开发框架 前端开发 .NET
C#编程与Web开发
【4月更文挑战第21天】本文探讨了C#在Web开发中的应用,包括使用ASP.NET框架、MVC模式、Web API和Entity Framework。C#作为.NET框架的主要语言,结合这些工具,能创建动态、高效的Web应用。实际案例涉及企业级应用、电子商务和社交媒体平台。尽管面临竞争和挑战,但C#在Web开发领域的前景将持续拓展。
|
17天前
|
SQL 开发框架 安全
C#编程与多线程处理
【4月更文挑战第21天】探索C#多线程处理,提升程序性能与响应性。了解C#中的Thread、Task类及Async/Await关键字,掌握线程同步与安全,实践并发计算、网络服务及UI优化。跟随未来发展趋势,利用C#打造高效应用。
|
17天前
|
存储 安全 网络安全
C#编程的安全性与加密技术
【4月更文挑战第21天】C#在.NET框架支持下,以其面向对象和高级特性成为安全软件开发的利器。本文探讨C#在安全加密领域的应用,包括使用System.Security.Cryptography库实现加密算法,利用SSL/TLS保障网络传输安全,进行身份验证,并强调编写安全代码的重要性。实际案例涵盖在线支付、企业应用和文件加密,展示了C#在应对安全挑战的同时,不断拓展其在该领域的潜力和未来前景。
|
17天前
|
人工智能 C# 开发者
C#编程中的图形界面设计
【4月更文挑战第21天】本文探讨了C#在GUI设计中的应用,介绍了Windows Forms、WPF和UWP等常用框架,强调了简洁界面、响应式设计和数据绑定等最佳实践。通过实际案例,展示了C#在企业应用、游戏开发和移动应用中的GUI实现。随着技术发展,C#在GUI设计的未来将趋向于跨平台、更丰富的组件和AI集成,为开发者创造更多可能性。
|
17天前
|
存储 算法 C#
C#编程与数据结构的结合
【4月更文挑战第21天】本文探讨了C#如何结合数据结构以构建高效软件,强调数据结构在C#中的重要性。C#作为面向对象的编程语言,提供内置数据结构如List、Array和Dictionary,同时也支持自定义数据结构。文章列举了C#实现数组、链表、栈、队列等基础数据结构的示例,并讨论了它们在排序、图算法和数据库访问等场景的应用。掌握C#数据结构有助于编写高性能、可维护的代码。