news 2026/4/16 15:52:39

C#集合、泛型、字典、异常

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C#集合、泛型、字典、异常

一、ArrayList集合

C# 中的集合是用来存储、管理一组数据的类。

ArrayList集合跟数组很相似,同样都可以根据下标控制值,但是数组的大小是固定的,而ArrayList集合相当于一个动态的数组,它可以使用方法实现添加删除等操作。但是数组可以是多维的,而ArrayList集合只能是一维的。

看一个案例来使用:

ArrayList集合和类一样,需要先实例化对象。这里的array就是集合的名字,前面的ArrayList则说明这是一个list集合。这里我们从键盘输入,循环存在list集合中。集合的添加就是Add,因为list是一个类,我们就可以使用(.)来调用集合的方法,括号中就填需要写入的内容。

这里集合的遍历一般用foreach,for循环也是可以的。但是我们集合一般是不需要更改值,所以可以直接用foreach遍历。

来看一些比较常用的list方法:

这里的insert代表插入的意思,后面的0指的是下标,这里是从控制台插入一个值到指定下标0处。

remove这里是移除的意思,从list集合中去寻找第一个值为0的,然后将他移除。

而removeat则是在list集合中寻找下标为0的值,并将它移除。

removerange是指从0这个下标开始移除,移除5个。

clear则是将list集合中的所有元素全都移除。

contains则是在这个集合中寻找0这个值是否在集合中,返回true和false。

indexof则是寻找这个集合中第一个找到的值,找到则返回下标或者否则返回-1。

lastindexof就是寻找最后一个。

二、队列Queue

队列和list集合一样都可以存储任意类型的数据,它遵循先进先出的原则,但他不能获得指定位置的数据,只能存入和取出,取出后队列中的元素会自动删除。

队列中的元素只能先进先出,队列的出口端叫做队头,队列的入口端叫做队尾。

这里就创建了一个简单的队列,<string>这个则是对这个队列进行了限制,限制他只能是string类型的元素。(.Enqueue)这里就是入队了,为这个队列添加元素。(.peek)则是查看这个队列的第一个元素,但是不把这个队列删除。出队则直接使用循环读取出来就好了,但是读取出来之后队列中就不会有值了。(.count)这个是查看队列中的元素个数。

Dequeue()这个则是移除并返回队首元素(若队列为空则抛出InvalidOperationException

clear()则是清空所有元素。

三、栈

栈和前面的list一样都是存放数据的,但是这个得遵守先进后出的原则。他和队列一样不能获得指定位置的数据,只能存入和取出,取出后栈中的元素会自动删除。

先实例化对象,push就是将括号中的string类型的元素压入栈中。count则是查看栈中的数量。peek则是查看栈顶的元素。pop就会将栈中的元素一个一个弹出栈。count是查看栈中剩余的元素数量。

四、泛型

了解泛型就得先了解装箱和拆箱,首先所有的值类型和引用类型的基类是object类型。而装箱则是将值类型转换为引用类型,拆箱就是将引用类型转换为值类型。用装箱拆箱就可以做到类型之间相互切换。

而泛型则是我们在处理不同数据但比较相似的代码时就可以使用。它可以使代码更加通用,避免代码冗余。

这就是一个泛型方法的用法,下面再math1类中定义了一个add的泛型方法,其中的值的类型是T类型。然后在main方法中测试,先实例化对象,然后调用add这个方法,但是传入的数据类型是不同的,得到的数据类型也会不同。

泛型方法可以将不同类型的数据放在同一个泛型方法中运行。

而这里就是泛型类的案例,这里创建了一个泛型类,里面的字段_item也是泛型的,我们使用get方法和put方法来实现不同类型值在泛型类中通过方法来传递。

泛型约束:泛型约束是为了让他对指定的类型来使用,比如where T : struct,这个就是为了只让值类型数据使用。

这里就对add这个泛型方法进行了限制。只能输入值类型的数据。

如果使用了string类型就会报错,因为被限制了。

五、字典

字典是键值对的集合(key,value)。在字典中键(key)不可重复并且不能为空,但是值(value)可以为空。例:

Dictionary<string, int> ageDict = new Dictionary<string, int>();

这一句就是创建了一个字典,<>中的string代表了键的类型,后面int代表了值的类型。

在字典中的添加就使用Add(键,值),如果键已存在会抛出ArgumentException。

字典中的键就相当于数组中的下标,可以直接用([键])来找到对应的值。

TryGetValue则是查看这个字典中是不是有这个键,如果没有就会抛出异常。

remove则可以通过键来删除字典中的元素。

遍历整个字典我们通常使用foreach。它可以直接读取字典中的键或者值。

六、异常

之前我们编写程序时会常常出现bug,这会直接导致程序还未进行完就奔溃。为了不让这程序直接奔溃,我们就需要使用到异常,让他抛出异常原因而不是奔溃程序。

ExceptionTest exceptionTest = new ExceptionTest();

这里我们得先实例化对象,然后才能调用里面的异常。

throw 是主动抛出异常,执行到这个语句时会停止之后的代码进行,会寻找就近的try catch语句来进行异常处理。如果没有try catch 语句则会程序奔溃。

try中放入的是有可能出现异常的代码,而catch则是处理异常的代码。

finally用于资源的释放,避免程序奔溃导致资源泄露。

catch可以在后面继续添加,因为可能不止一个异常,所以需要多重处理。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 15:50:41

Windows和Office激活难题?3个简单步骤让你告别烦恼

Windows和Office激活难题&#xff1f;3个简单步骤让你告别烦恼 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows系统弹出的激活提醒而头疼吗&#xff1f;Office突然变成只读模式&am…

作者头像 李华
网站建设 2026/4/16 15:48:30

Unity数据可视化插件XCharts:5分钟快速上手指南

Unity数据可视化插件XCharts&#xff1a;5分钟快速上手指南 【免费下载链接】XCharts A charting and data visualization library for Unity. Unity数据可视化图表插件。 项目地址: https://gitcode.com/gh_mirrors/xc/XCharts XCharts是一款基于UGUI的功能强大、简单…

作者头像 李华
网站建设 2026/4/16 15:47:13

Android软件工程师在车载项目中的技术开发指南

引言 随着智能汽车技术的飞速发展,车载信息娱乐系统(In-Vehicle Infotainment, IVI)已成为现代汽车的核心组成部分。Android作为开源操作系统,因其灵活性、生态丰富性和可定制性,被广泛应用于车载项目中。例如,Android Automotive OS(AAOS)是Google专为汽车设计的平台…

作者头像 李华
网站建设 2026/4/16 15:46:57

深入理解Sentinel:15 Sentinel 集群限流的实现(上)

由于请求倾斜的存在&#xff0c;分发到集群中每个节点上的流量不可能均匀&#xff0c;所以单机限流无法实现精确的限制整个集群的整体流量&#xff0c;导致总流量没有到达阈值的情况下一些机器就开始限流。例如服务 A 部署了 3 个节点&#xff0c;规则配置限流阈值为 200qps&am…

作者头像 李华
网站建设 2026/4/16 15:46:14

推客管理一团糟?一套系统全理顺

做分销、拉推客、靠私域卖货&#xff0c;最怕的就是管理混乱&#xff1a;推客招募没章法、业绩统计靠手工、佣金对账天天吵、客户归属分不清、裂变全靠嘴去催。人越招越多&#xff0c;管理越来越乱&#xff0c;销量反而上不去。问题根本不在人&#xff0c;而在没有一套专业的推…

作者头像 李华