在C#的语法中有一种比较特殊的写法,叫做Lambda表达式,这种表达式的写法在于你查询数据的时候直接是使用以下箭头的形式来表示查询语句的:=>。例如,我们要查找学生的List<Student>集合中班级编号为1001的所有学生数据,我们即可用Studentlist.Where(t=>t.ClassCode=‘1001’)语句来直接完成,无需再写繁琐的foreach语句或者for循环。Lambda表达式的运算符即为=>。
一、Lambda表达式定义
Lambda表达式实际上是一种匿名函数,在Lambda表达式中可以包含语句以及运算等操作。并且可用于创建委托或表达式目录树类型,支持带有可绑定到委托或表达式树的输入参数的内联表达式。使用Lambda表达式可大大减少代码量,使得代码更加的优美、简洁,更有可观性。
二、Lambda定义方式:
1标准定义方式:
Func<参数1类型, 参数2类型, 返回值类型> fnName = (参数1, 参数2) =>{ 方法代码 }
Func<int, int, bool> fnName = (int a, int b) =>
{
return a > b;
};
// 调用时和普通的方法相同
Console.WriteLine(fnName(1, 2)); // false
Console.WriteLine(fnName(2, 1)); // true
2 方法的实现中,参数的类型可以省略
Func<int, int, bool> fnName1 = (a, b) =>
{
return a > b;
};
3:如果只有一个参数,可以省略小括号
Func<int, bool> fnName2 = a =>
{
return a % 2 == 0;
};
4如果方法中只有一个表达式,可以省略大括号和return,它会自动返回表达式的运行结果
Func<int, int, int> fnName4 = (a, b) => a + b;
Console.WriteLine(fnName4(3, 8)); // 11
当然如果用到数组或者集合的对应的方法中也可以简写成如下:
int[] ints1 = { 1, 2, 3, 4, 5 };
// 查找第一个偶数
Console.WriteLine(Array.Find(ints1, a => a % 2 == 0));
三、另外关于集合的其他和lambda有关的APi如下
List<int> list2 = new List<int>();
list2.Add(2);
list2.Add(3);
list2.Add(4);
Console.WriteLine(list2.Any(it => it % 2 == 0)); // 数组当中任何一个元素满足这个条件
Console.WriteLine(list2.All(x => x % 2 == 0));//All 每一个元素都得必须满足条件
四、lambda其他常用的表达式 通过一个案例进行描述
在C#的List集合中,我们时常需要使用到大量的运算或者筛选等操作,按常规的方式无非就是利用foreach或者for对List集合进行循环操作,最后运算出结果。此种方法往往需要写多行语句,阅读性稍微差点,当然复杂的情况下编写也费时。博主遇到这种情况一般比较喜欢偷懒,很少会去直接写循环,而是直接使用Lambda表达式一条语句完成。
1、先假定好我们待会使用的范例的格式:
Student实体:此实体包含下列几个属性,StudentName,StudentCode,ClassCode,ClassName,Age
2 通过for循环添加几个学生信息放到list中 其中有些数据为了省事仅仅通过if条件区分不同对象的值
3 查询班级编号为1001的班级下面的所有学生实体并返回到list1001中存储
效果如下:查询的是1001的学生,因为在创建对象的时候把偶数对象设置成了1001.所以打印效果为偶数姓名和对应班级学生
4查询班级编号为1001的班级下面的所有学生实体并返回到list1001中存储,并按照学生的出生日期从大到小排列。
效果如下:
5 查询班级编号为1001的班级下面的姓氏为【李】的同学的所有集合,并按照学生的出生日期从小到大排列。
效果如下:
6一些其他常用的表达式
效果如下:
总结以上代码和效果都是自己在vs经过验证之后的截图,初次编写,如有不足地方 ,请多多指教,另外本文章有些内容来源于其他网站,如有侵权,请告知删除.