1. lambda
1.1 匿名方法lambda表达式
Lambda表达式
Lambda是一个匿名方法,实例化委托的一个参数,编译的时候会产生一个密封类,同时增加一个方法。
Lambda表达式的演化
过程如下:
public delegate void ShowInfo(string name, int age);
1.1.1 .NET Framework 1.0
ShowInfo showInfo = new ShowInfo(GetInfo);
showInfo.Invoke("Olive", 16);
1.1.2 .NET Framework 2.0 匿名方法,delegate关键字
showInfo = new ShowInfo(delegate (string name, int age) {
Console.WriteLine($"2.0:Age is {age},Name is {name}");
});
showInfo.Invoke("墨遥", 30);
1.1.3 .NET Framework 3.0 去掉delegete关键字,增加一个箭头
showInfo = new ShowInfo((string name, int age) => {
Console.WriteLine($"3.0:Age is {age},Name is {name}");
});
showInfo.Invoke("XF", 116);
showInfo = new ShowInfo((name, age) =>//省略参数类型,编译器的语法糖,根据委托推算,编译时有类型
{
Console.WriteLine($"语法糖:Age is {age},Name is {name}");
});
showInfo.Invoke("HY", 20);
showInfo = new ShowInfo((name, age) => Console.WriteLine($"语法糖:Age is {age},Name is {name} 如果方法体只有一行,可以去掉大括号"));
showInfo("遥", 21);
showInfo=(name,age)=>Console.WriteLine($"语法糖:Age is {age},Name is {name} 可以省略new 委托 ");
showInfo("哈哈", 18);
1.2 匿名类 var 扩展方法
1.2.1 匿名类 var
.NET Framework 3.0 出现匿名类var。如下所示:
var person = new { Id = 1, Name = "Olive", Age = 16 };
//匿名类属性只能在创建时赋值,不能修改属性值
1.2.2 扩展方法
扩展方法,静态类中的静态方法,第一个参数前加this 修饰
public static class ExtendMethod
{
public static void ShowInfo(this Person p)
{
Console.WriteLine($"Person Info is Id={p.Id},Name={p.Name},Age={p.Age}");
}
}
调用如下:
Person p = new Person() { Id = 116, Name = "Olive", Age = 30 };
p.ShowInfo();//ShowInfo即为扩展方法,Person本身并无此方法。
扩展方法调用,很像实例方法,就像扩展了Person的逻辑
扩展方法的使用场景:
- 第三方的类,不适合修改源码,可以通过扩展方法增加逻辑
- 适合组件式开发的扩展(.NetCore),定义接口或者类,是按照最小需求,但是在开发的时候又经常需要一些方法,就通过扩展方法
- 扩展一些常见操作(会污染基础类型,一般少为object 没有约束的泛型去扩展)
1.3 Linq to object
Linq To Object 是在Enumerable类,针对IEnumerable数据(指的是内存数据)进行的一些列的封装。
Where:把对数据过滤的通用操作完成,把可变的过滤逻辑交给委托
Select:把对数据转化的通用操作完成,把可变的转换逻辑交给委托
OrderBy:排序
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库