外贸自建站费用,海报模板图片,网站开发小组总结报告,优化公司网站lambd表达式概念lambd表达式#xff0c;可以让我们定义一个变量接收一个函数#xff0c;主要是作为另外一个函数的参数进行使用。C# 的 Lambda 表达式本质是 “匿名函数的简洁写法”#xff0c;用于快速创建委托 / 表达式树实例#xff0c;变量与函数体间用#xff08…lambd表达式概念lambd表达式可以让我们定义一个变量接收一个函数主要是作为另外一个函数的参数进行使用。C# 的 Lambda 表达式本质是 “匿名函数的简洁写法”用于快速创建委托 / 表达式树实例变量与函数体间用Lambda 运算符分隔而 “箭头函数”如 JavaScript 的(){}是独立的函数语法 C# 中并无此概念 ——C# 的仅用于 Lambda 表达式而非定义独立函数这是关键区别。定义lambda表达式方法的组成 参数列表、返回值 、方法名 方法体1.使用Func关键字接收有返回值的lambda表达式Funcint,int ,int f1 (a, b) { return a b; }; Console.WriteLine(f1(10,20));// 可以通过变量名调用函数Func参数类型,参数类型返回值类型 f1 (a,b){return ab}可以接受有返回值的lambda表达式 参数个数没有限制、返回值的类型也是没有限制Func 方法类型、函数类型第一个类型 是参数1的类型第二个类型 是参数2的类型第三个类型 是返回值的类型f1 变量名(a, b) 参数类别 不用写类型多个参数时候加() 表达式{}方法体 有返回值的添加return 关键字。2使用Action关键字接收无返回值的lambda表达式定义一个字符串参数 无返回值的lambda表达式如果一个参数可以把()不写如果函数体只有一句可以把{}省掉Actionstring f2 (a) Console.WriteLine(a); //只能接收无返回值的lambda表达式 f2(hell world);3 使用Predicate关键字接收返回值为bool类型的lambda表达式只能接收返回值为bool类型的lambda表达式Predicateint f3 a a %20; Console.WriteLine(f3(3));//false Funcint,bool f4 a a%30; Console.WriteLine(f4(9));//truelambda具体的使用场景最为另外一个函数参数进行使用数组的查询方法当中使用int[] ints { 1, 2, 3, 4,6,9 }; Console.WriteLine(Array.Find(ints, a a % 2 0));//2 int[] ss Array.FindAll(ints,vv%30);//找到所有的数组 // 第一种遍历数组 for (int i 0; i ss.Length; i) { Console.WriteLine(ss[i]-------); } //第二种遍历数组 foreach (var item in ss) { Console.WriteLine(item); } // 第三种遍历数组 Array.ForEach(ss, v Console.WriteLine(v ?????)); //where 找到所有满足条件的元素 foreach (var item in ints.Where(v { return v % 3 0; })) { Console.WriteLine(item); } Console.ReadKey();ArrayList动态数组ArrayList动态数组概念动态数组一个不固定长度的数组集合并且可以存储不同类型的元素例如一个arrayList对象可以存储整型、字符串、对象、数组等但是int[]这种数组一旦创建好之后 不能后续添加元素也就是长度是固定并且一个数组对象只能存储一种类型的元素ArrayList 弊端取出元素是一个object 必须对其在进行类型转换.1.ArrayList动态数组的使用//1 创建一个arrayList对象 int[] ints new int[] { 1, 2, 3 }; People p1 new People() { Namezs}; ArrayList arr new ArrayList() { 1,2,3,坤拳,true,ints,p1}; //初始化添加元素 //2 取出元素 通过索引值取元素 arr[1] //int aa arr[0]; //数组取出的元素是object类型如果想转成其他类型 必须强制转换 Console.WriteLine( Convert.ToInt16(arr[1]));ListT泛型集合list集合是最常用的动态数组支持灵活的增删改查也是 Lambda 表达式最常结合使用的容器之一。ListT 是泛型类T 为元素类型如 int、string、自定义类支持动态扩容无需手动指定长度。List方法和ArrayList很像 区别在于list可以指定类型进行存储存储同一种类型数据 取出时候不用强制转换保证数据类型安全List集合的方法1. 添加元素Listint list1 new Listint(); //创建集合对象 list1.Add(1);//添加元素 list1.AddRange(new int[] {9,10,11}); //添加多个2. 删除Listint list1 new Listint(){ 1,2,3,5,4};; //创建集合对象 list1.Remove(5);//删除指定元素 list1.RemoveAt(list1.Count-1);//删除指定位置的元素 list1.RemoveAll(v v % 3 0);//删除满足条件所有的元素3.修改Listint list1 new Listint() { 1,23,5,4}; //创建集合对象 list1[0] 20;// 对集合的第一个元素重新赋值4.插入数据Listint list1 new Listint() { 1,23,5,4}; //创建集合对象 list1.Insert(1, 10);//在索引值为1的地方插入 105. IndexOf() 获取元素的索引值Listint list1 new Listint() { 1,23,5,4}; Console.WriteLine(list1.IndexOf(23));6. Clear()清空集合Listint list1 new Listint() { 1,23,5,4}; list1.Clear(); 清空集合7.Any() 有一个满足条件就为trueListint list1 new Listint() { 1,23,5,4}; Console.WriteLine(list1.Any(v v 3));8.Average() 求序列中元素的平均值Listint list1 new Listint() { 1,23,5,4}; Console.WriteLine(list1.Average());9.Concat() 拼接俩个数组返回的是一个新数组Listint list1 new Listint() { 1,23,5,4}; Listint list2 list1.Concat(new int[] {36}).ToList(); //.ToList() 转成list类型 //返回值是 IEnumerable可枚举接口类型 , 需要转成list10Contains() 判断数组是否包含 某个元素返回值bool 类型Listint list1 new Listint() { 1,23,5,4}; Console.WriteLine(list1.Contains(2));//数组是否包含211 Sum() 求和Listint list1 new Listint() { 1,23,5,4}; Console.WriteLine(list1.Sum());12 Skip() 跳过自定的个数返回剩余的Listint list1 new Listint() { 1,23,5,4}; //创建集合对象 int[] ss list1.Skip(1).ToArray();13 Max() 找出序列元素最大值Listint list1 new Listint() { 1,23,5,4}; //创建集合对象 Console.WriteLine(list1.Max());14.Enumerable.Join() 方法核心是基于指定的关联条件将两个集合进行内连接 ,最终生成对象类型的新序列class People { public int Num1 { get; set; } public int Num2 { get; set; } }Listint list1 new Listint() { 1,23,5,4}; //创建集合对象 int[] nums new int[] { 1, 2, 4 }; var result list1.Join(nums , x x, y y * 10, (x, y) new People() { Num1 x, Num2 y } ); foreach (var item in result) { Console.WriteLine(item.Num1 ----- item.Num2); } Console.ReadKey(); //定义一个集合{ 1,23,5,4} 一个数组 nums { 1, 2, 4 } //x x, 针对list1集合里面的元素进行操作不做任何计算 //y y * 10 , 针对nums里面元素进行*10的操作 变成了{10,20,40} //(x,y)new People(){ Num1x,Num2y } 对变化之后的xy添加到People的Num1和Num2属性上 //方法的结果一个集合list1 的 20 与 nums 的 2*10 对应上 把对应关返回了 //也就是20 ----- 2作为匹配结果 // 10 ----1 也是匹配上