咱们聊聊数组和列表的爱恨情仇
刚学 C# 的时候,最头疼的往往是两个问题:
第一,想往数组里塞东西,数组偏偏说“我满了”;
第二,好不容易塞进去了,取出来却是个乱码,还得自己想办法翻译。
今天咱们不整虚的,直接看场景,搞懂 ArrayList 和 List 到底咋用,为什么 List 是现在大家的最爱。
一、 数组:那个脾气火爆的“一次性行李箱”
想象一下,你去机场,行李箱里能装 10 件衣服。你高高兴兴装了,结果到了酒店,朋友递给你一件羽绒服。
你说:“哎呀,装不下了,我箱子的容量是死的。”
数组就像这个行李箱。声明了多大,就只能多大。想变大?没有代码能行,唯一的办法是“复制粘贴”:把旧行李箱里的东西倒到新行李箱里,扔掉旧箱子。这在 C# 里叫“数组扩容”,听着挺高级,其实就是个搬运工,干得多,效率低。
二、 ArrayList:那个“大杂烩”的“万能箱”
为了解决数组容量死板的问题,老前辈们搞出了 ArrayList。
ArrayList 就像个超大号箱子,理论上能装无限多东西。你塞进去一个苹果、一把勺子、一张照片,它通通不问,全收了。最骚的是,在 C# 里,万物皆对象,它以为这箱子里装的都是“对象”。
你要是直接用这玩意儿,迟早得把自己坑惨。
你想取出来算个数字,比如买苹果花了 5 块钱。你从 ArrayList 里拿出这个“玩意儿”,它默认是 object 类型,根本没法直接算。你还得像老奶奶翻译老外单词一样,强行把类型转一下:(int)那个玩意儿。万一这个玩意儿是“勺子”,你这就属于强行读档,系统直接崩给你看。这就是所谓的“装箱”和“拆箱”,性能的大杀器。
三、 List:自带“分类收纳”功能的智能箱
后来,大家发现 ArrayList 也就是个“贪吃蛇”,装什么都行但不分类,想找东西还得翻半天。于是,List 这种泛型集合应运而生。
List 最大的魅力,在于它有个“类型参数”。
你可以告诉 List:“我的箱子里,只装苹果。”
一旦你这么声明,C# 就会强制遵守规则。你往里扔一根香蕉?不行,编译器直接报错。这样一来,代码一写出来,数据结构就严丝合缝,根本不会出现拿着勺子去称重的情况。
相比 ArrayList,List 就像是把行李箱改装成了分类收纳盒。它不仅容量可以自动变大(像 ArrayList 一样灵活),而且它知道箱子里装的是什么(像数组一样类型安全)。更重要的是,它不会像 ArrayList 那样因为类型转换把你折腾得死去活来。
总结一下这俩货
- ArrayList: 像个粗鲁的肌肉男,力气大,能装,但啥都塞,乱七八糟。只有在不得不处理一些极其古老、不支持的代码时,偶尔才想起来用一下。
- List: 像个整理得井井有条的收纳师,按需扩容,分类明确,安全又快捷。它是现代 C# 开发的首选。
行动召唤
别犹豫了,以后写新代码,直接 List 走起。除非你的老师非要你演示怎么把 ArrayList 当成“大杂烩”来耍帅,否则,别回头,List 才是你的真命天子。
开始写你的第一个 List 吧,别让变量空着,把数据装进去!





这一切,似未曾拥有