5lamdba
什么lamdba表达式
是一种匿名方法,定义方法时候不需要写访问区分符,方法名等等
作用:简化方法的定义
lamdba表达式语法
参数列表)=>{方法体}
定义一个无参数无返回值的方法
()=>{}
定义一个有参数无返回值的方法
(A)=>{};
定义一个有一个参数有返回值的方法
(A)=>{return …};
定义两个参数有返回值的方法
(A,B)=>{return …};
lamdba表达式语法一般用于某些需要传一个委托为参数的方法
比如:List泛型集合里,很多方法都可以传委托,因此可以自己写一个符合委托的方法传进去,让其执行我们写的逻辑,但是写方法太麻烦,所以就可以使用lamdba代替
实现list的排序筛选方法
/// <summary>
/// 自定义循环方法
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="list"></param>
/// <param name="action"></param>
public static void MyForeach<T>(this List<T> list, Action<T> action)
{
//循环输出list里的元素
for (int i = 0; i < list.Count; i++)
{
//执行用户传的方法
action(list[i]);
}
}
/// <summary>
/// 判断集合中值是否相等
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="list"></param>
/// <param name="action"></param>
/// <returns></returns>
public static T MyFirstOrDefault<T>(this List<T> list, Func<T ,bool> action)
{
for (int i = 0; i < list.Count; i++)
{
//调用委托判断是否和集合当前的元素相等
if (action(list[i]))
{
return list[i];
}
}
//循环完没找到就返回默认值
return default(T);
}
/// <summary>
/// 自己写的Where扩展方法
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="list"></param>
/// <param name="pre"></param>
/// <returns></returns>
public static List<T> MyWhere<T>(this List<T> list, Predicate<T> pre)
{
List<T> newList = new List<T>();
foreach (var item in list)
{
if (pre(item))
{
newList.Add(item);
}
}
return newList;
}
使用匿名方法实现排序及筛选
List<string> myList = new List<string>() { "葡萄", "香蕉", "西瓜", "木瓜", "哈密瓜", "西瓜","香瓜" };
//lamdba实现查询
Console.WriteLine("请输入要查找的水果名");
string name = Console.ReadLine();
//查指定的水果,只能找到第一次匹配的项
//string jgname = myList.FirstOrDefault((a) => { return a == name; });
//使用会First报错
//调用自己写的扩展方法
//string jgname = myList.MyFirstOrDefault(a => name == a);
//Console.WriteLine(jgname);
//查指定的水果,只能找到所有匹配的项(精确查找)
//List<string> myList2 = myList.Where((a) => { return a == name; }).ToList();
//查指定的水果,只能找到所有匹配的项(模糊查找)1
//List<string> myList2 = myList.Where((a) => { return a.Contains(name); }).ToList();
//查指定的水果,只能找到所有匹配的项(模糊查找)2,并排序,OrderBy升序,OrderByDescending降序
//List<string> myList2 = myList.Where((a) => { return a.IndexOf(name) > -1; }).OrderByDescending((a) => { return a; }).ToList();
//foreach (var item in myList2)
//{
// Console.WriteLine(item);
//}
使用匿名方法实现排序及筛选2(结合对象)
用到的用户信息类如下:
public class UserInfo
{
public string name { get; set; }
public int age { get; set; }
public string address { get; set; }
}
具体
List<UserInfo> myList = new List<UserInfo>();
myList.Add(new UserInfo() { name = "李清照", age = 23, address = "宋" });
myList.Add(new UserInfo() { name = "黄月英", age = 18, address = "三国" });
myList.Add(new UserInfo() { name = "黄忠", age = 50, address = "三国" });
myList.Add(new UserInfo() { name = "黄某", age = 27, address = "三国" });
myList.Add(new UserInfo() { name = "黄某", age = 35, address = "三国" });
Console.WriteLine("输入要查找的姓名");
string name = Console.ReadLine();
Console.WriteLine("输入要查找的地址");
string address = Console.ReadLine();
//根据姓名模糊查询和地址精确查询并且根据年龄排序
//List<UserInfo> jgmyList = myList.Where((a) => { return a.name.Contains(name) && a.address == address; }).OrderBy((b) => { return b.age; }).ToList();
//循环遍历
//foreach (UserInfo item in jgmyList)
//{
// Console.WriteLine(string.Format("用户名:{0},年龄:{1},地址:{2}", item.name, item.age, item.address));
//}
//不输入条件查全表,输入姓名按照姓名查,输入地址按照地址查,都输入的话就表示精确查找
//List<UserInfo> jgmyList = myList.Where((a) =>
//{
// //返回一个false就表示没有满足条件,最后转换成集合,集合里也为空
// return (string.IsNullOrWhiteSpace(name) || a.name == name) && (string.IsNullOrWhiteSpace(address) || a.address == address);
//}).OrderBy((b) =>
//{
// return b.age;
//}).ToList();
//简写上一个匿名方法
List<UserInfo> jgmyList = myList.Where(a=>(string.IsNullOrWhiteSpace(name)||a.name==name)&&
(string.IsNullOrWhiteSpace(address)||a.address==address)).OrderBy(b=>b.age).ToList();
//满足条件的数据条数
//Console.WriteLine(jgmyList.Count);
////自定义循环
//jgmyList.ForEach((item) =>
//{
// Console.WriteLine(string.Format("用户名:{0},年龄:{1},地址:{2}", item.name, item.age, item.address));
//});
//调用自己写的扩展循环方法
jgmyList.MyForeach(item => Console.WriteLine(string.Format("用户名:{0},年龄:{1},地址:{2}", item.name, item.age, item.address)));
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构