当前位置: 首页 > news >正文

Vision Studio C#中Lambda表达式、可空类型数据、动态数组ArrayList、List数组的运用

Lambdan表达式

lambda表达式: 可以让我们定义一个变量接收的一个函数,主要是作为另外一个函数的参数进行使用,具体体现变量和函数体之间使用 =>,所以其他的编程语言称之为箭头函数,但是严谨来说C#没有箭头函数

如果一个函数仅在当前作用域进行使用,可以把函数定义在当前作用域就行

int Sum(int a,int b) { return a + b; } Console.WriteLine(Sum(10,20));

定义一个lambda表达式

方法组成:参数列表、返回值、方法名、方法体

它有三种类型:

第一种 使用Func关键字接收有返回值的lambda表达式
Func<> 方法类型、函数类型
第一个类型 是参数1的类型
第二个类型 是参数2的类型
第三个类型 是返回值的类型

结构组成:


f1 变量名
(a,b)参数类别 不用写类型,多个参数的时候加个 ()
=> 表达式
{ }
方法体
有返回值的添加return 关键字

Func<int, int, int> f1 = (a, b) => { return a + b; }; Console.WriteLine(f1(10,20));//可以通过变量名调用函数

第二种 使用Action关键字接收无返回值的lambda表达式
定义一个字符串参数 无返回值的lambda表达式
如果一个参数的时候可以把()不写
如果函数体只有一句可以把{ }
省略掉

Action<string> f2 = (a) => Console.WriteLine(a); f2("hello word");

第三种 使用Predicate<>关键字接收返回值为bool类型的lambda表达式

Predicate<int> f3 =a => a%2 == 0; Console.WriteLine(f3(3));//false Func<int ,bool >f4 =a => a%3==0; Console.WriteLine(f4(9));//true
/*Func<参数类型 参数类型 返回值类型> f1 =(a,b)=>{return a+b} *可以接收有返回值的lambda表达式 参数个数没有限制、返回值的类型也是没有限制 * *Action<string> f2 = a =>Console.WriteLine(a) *只能接收无返回值的lambda表达式 * *Predicate<int> f3 = a =>a%2==0; *只能接收返回值为bool类型的lambda表达式 * */

lambda具体的使用场景: 最为另外一个函数参数进行使用 数组的查询方法当中使用

int[] ints = { 1, 2, 3, 4, 5, 6, 7, 8, 9, }; Console.WriteLine(Array.Find(ints,a =>a%2==0)); int[] ss = Array.FindAll(ints, v => v % 3 == 0);//找到所有的数组 //第一种遍历数组 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); }

可空类型数据

空类型是null,引用类型的变量都可以赋值成null

string s = null; int[] ints = null; object o = null;

基本数据类型不能赋值为null的

int a = null;// 报错

如果想让基本数据类型能够赋值为null 可以使用?

int? a = null; // a以后可以等于null 在原先的范围内加一个null赋值范围 a = 100;// a可以再赋值100 // int sum = a + 100; 报错 a是可空类型,但是sum不是可空类型

即想使用可空类型 又想使用基本类型进行运算,可以把可空类型再加一个问号 使用双??

int? b = null; // b可空类型 b = 300; int aa = b ?? 100; // b?? 如果b是null aa的值100, 如果b不是null aa的值300 Console.WriteLine(aa); //300 int? c = null; int d = c ?? 100; Console.WriteLine(d);//100 c = 999; int sum = (c ?? 100) + 200; Console.WriteLine(sum);// 1199

动态数组ArrayList

Arraylist:

动态数组一个不固定长度的数组集合,并且可以存储不用类型的元素,例如一个arrayList对象可以存储整形、字符串、对象、数组等
但是int[]这种数组一旦创建好之后 不能后续添加元素 也就是长度他是固定的 并且一个数组对只能存储一种类型的元素

弊端

ArrayList 弊端: 取出元素是一个object类型 必须对其再进行类型转换

使用动态数组ArrayList

第一步先创建一个arrayList对象

int[] ints = new int[] { 1, 2, 3 }; People p1 = new People() { Name="张三" }; ArrayList arr = new ArrayList() { 1, 2, 3,"李四",true,ints,p1 };//这句话是初始化添加的元素

第二步取出元素 通过索引值取元素 arr[i]

//int aa =arr[0];//数组取出的元素是object类型 如果想转成其他类型 必须强制转换一下 Console.WriteLine(Convert.ToInt32(arr[1]));

第三步添加元素

arr.Add(1); arr.Add("王五");//添加一个元素 arr.AddRange(ints);//也可以添加一个数组

第四步删除元素

arr.Remove("王五");//删除他这个指定的元素 arr.RemoveAt(0); //删除指定位置的元素 //arr.RemoveRange(0,3); //从指定参数1位置开始删除下面参数个数的元素

第五步修改元素

arr[1] = 48;

第六步数组排序

arr.Sort();//默认升序排序

第七步indexOf() 元素的索引值

Console.WriteLine(arr.IndexOf(48));

第八步count 获取数组的个数

Console.WriteLine(arr.Count);

第九步Reverse() 把数组里面的元素进行倒序

arr.Reverse();

第十步toArray() 把ArrayList转成Array(int[])

object[] i1 = arr.ToArray();

ArrayList 类: arr 对象

查询可以查询一个arr[1],查询多个for遍历
最后算法遍历元素
如果数组元素类型不一样遍历的时候把类型改成object

foreach (object i in arr) { Console.WriteLine(i+"---------"); }

List数组

ArrayList 动态数组 存储元素类型object类型 取出的时候转成对应的类型,类型不安全

List: 方法和ArrayList很像 区别在于list可以指定类型进行存储,存储同一种类型数据,取出时候不用强制转换,保证数据类型安全

创建一个List的集合对象

List<int> list = new List<int>();//创建一个集合对象

1 添加元素

list.Add(1); list.Add(2); list.Add(3); list.AddRange(new int[] { 9, 10, 11 });//添加多个数

2 删除

list.Remove(11);//删除指定元素 list.RemoveAt(list.Count - 1);//删除指定位置的元素 list.RemoveAll(v => v % 3 == 0);//删除满足条件对的所有的元素

3 修改

list[0] = 20;

4 插入数据

list.Insert(1, 10);//在索引值为1的地方插入888

5 IndexOf() 获取元素的索引值

Console.WriteLine(list.IndexOf(888));

6 遍历

foreach (int i in list) { Console.WriteLine(i+""); }
http://www.cnnetsun.cn/news/69879.html

相关文章:

  • AI编程革命!Claude Skills大揭秘:小白也能快速上手的Agent开发神器,大模型开发者必看!
  • 内点法求最优潮流附matlab代码
  • 三相PWM整流器有限集模型预测电流控制附Simulink仿真模型
  • 光伏四可“可观”功能:光伏电站全景数字化的底层支撑技术
  • 如何用FLUX.1-dev镜像在本地部署下一代AI绘画模型?
  • 基于 Comsol 移动网格方法的激光熔池流动数值模拟
  • BLDC无刷直流电机Matlab仿真:转速电流双闭环控制及有感无感换相方式研究
  • [光学原理与应用-491]:水冷机、零气模块CDA、功率计等影响266皮秒紫外激光器的种子源1064nm功率稳定性结果的主要因素有哪些?
  • 昆仑通态MCGS与欧姆龙E5CC温控器通讯实战:PID模式及输出启停控制
  • 通达信〖逆势突破强牛〗指标公式 逆市环境中率先突破前期重要压力位 较强内在上涨动力
  • 基于扰动观测器的永磁同步电机(PMSM)模型预测控制(MPC)仿真探索
  • AEB联合仿真算法设计:Carsim2019.0+Matlab/Simulink2021a实现...
  • Java毕设选题推荐:基于springboot个人博客系统的设计与实现基于SpringBoot+Vue个人博客系统的设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】
  • Java毕设选题推荐:基于springboot停车场车位预约系统基于Java springboot停车场管理系统停车位预约【附源码、mysql、文档、调试+代码讲解+全bao等】
  • Java毕设选题推荐:基于springboot的无人化、线上化、数据化海洋馆预约系统的设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】
  • Ascend C高级API应用:InitGlobalMemory与Pad操作的底层原理
  • Java毕设选题推荐:基于Java Web的新能源汽车信息咨询服务基于SpringBoot+Vue的新能源汽车信息咨询服务的设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 开箱即用的 GoWind Admin|风行,企业级前后端一体中后台框架:OPA 集成指南:从原理到实践
  • Object.defineProperty和Proxy实现拦截的区别
  • 若依物联网
  • PSEN1抗体:如何揭示阿尔茨海默病致病机制与治疗新靶点?
  • Docker Engine 升级指南:保障容器安全的关键步骤
  • 基于zigbee灯光控制照明及色温调节系统的设计与实现(有完整资料)
  • 7、Python高级语法:描述器、属性与元编程实战
  • 【开题答辩全过程】以 基于java技术的校园一卡通系统的设计与实现为例,包含答辩的问题和答案
  • 11、Python 包与应用开发全解析
  • django基于智能推荐算法的全屋定制平台网站设计
  • 详谈:解释器模式(四)
  • 双Buck电路并联下的下垂控制与VDCM协同控制策略:增强直流微电网稳定性的仿真应用
  • Java 日期格式化方法:SimpleDateFormat 和 DateTimeFormatter