在 C# 开发中,集合(Collection)是存储和管理多个对象的重要工具。相比数组,集合更加灵活,可以动态增加、删除元素,并提供丰富的数据操作方法。
本文作为《一个零基础小白的 C# 成长100天》系列教程的一部分,带你从基础理解 C# 集合。
一、什么是 C# 集合?
简单来说:
集合就是一个可以保存多个数据的容器。
例如:数组:
string[] names = new string[3]; names[0] = "张三"; names[1] = "李四"; names[2] = "王五";问题:
- 数组长度固定
- 添加删除麻烦
- 功能有限
集合:
List<string> names = new List<string>(); names.Add("张三"); names.Add("李四"); names.Add("王五");优势:
✅ 自动扩容
✅ 添加方便
✅ 删除方便
✅ 查询灵活
✅ 支持排序、筛选等操作
二、C# 集合分类
C# 集合主要分为两大类:
集合 │ ├── 非泛型集合 │ ├── ArrayList │ ├── Hashtable │ └── 泛型集合 ├── List<T> ├── Dictionary<TKey,TValue> ├── HashSet<T> ├── Queue<T> └── Stack<T>现代 C# 开发中:
推荐优先使用泛型集合。
三、List<T> 集合(最常用)
1. 什么是 List?
List 是动态数组。
命名空间:
using System.Collections.Generic;定义:
List<T> 集合名 = new List<T>();例如:
List<string> students = new List<string>(); students.Add("小明"); students.Add("小红"); students.Add("小刚");2. List 常用方法
添加元素 Add()
List<int> nums = new List<int>(); nums.Add(10); nums.Add(20); nums.Add(30);结果:
10 20 30批量添加 AddRange()
nums.AddRange( new int[]{40,50,60} );结果:
10 20 30 40 50 60获取元素
通过索引:
Console.WriteLine(nums[0]);输出:
10修改元素
nums[0]=100;结果:
100 20 30删除元素 Remove()
nums.Remove(20);删除值:
20根据索引删除 RemoveAt()
nums.RemoveAt(0);删除第一个元素。
清空集合
nums.Clear();获取数量
Console.WriteLine(nums.Count);四、遍历 List 集合
方式1:for循环
List<string> names = new List<string>() { "张三", "李四", "王五" }; for(int i=0;i<names.Count;i++) { Console.WriteLine(names[i]); }方式2:foreach(推荐)
foreach(string name in names) { Console.WriteLine(name); }输出:
张三 李四 王五五、Dictionary<TKey,TValue> 字典集合
Dictionary 是:
键值对集合。
类似:
身份证号码 → 人名 商品编号 → 商品 用户名 → 用户信息定义:
Dictionary<TKey,TValue>例如:
Dictionary<int,string> users = new Dictionary<int,string>(); users.Add(1001,"张三"); users.Add(1002,"李四");结构:
1001 ---> 张三 1002 ---> 李四根据 Key 获取 Value
Console.WriteLine(users[1001]);输出:
张三遍历 Dictionary
foreach(var item in users) { Console.WriteLine( item.Key + ":" + item.Value ); }输出:
1001:张三 1002:李四六、HashSet<T> 集合
HashSet 特点:
不允许重复数据。
例如:
HashSet<int> numbers = new HashSet<int>(); numbers.Add(10); numbers.Add(20); numbers.Add(10);结果:
10 20重复的10不会添加。
应用:
- 去重
- 判断是否存在
例如:
if(numbers.Contains(20)) { Console.WriteLine("存在"); }七、Queue<T> 队列集合
特点:
先进先出 FIFO
生活例子:
排队买票:
第一个进入 ↓ 第一个出去代码:
Queue<string> queue = new Queue<string>(); queue.Enqueue("张三"); queue.Enqueue("李四"); queue.Enqueue("王五");取出:
string name = queue.Dequeue(); Console.WriteLine(name);结果:
张三八、Stack<T> 栈集合
特点:
后进先出 LIFO
类似:
一摞书:
第三本 第二本 第一本拿的时候:
第三本先拿代码:
Stack<int> stack = new Stack<int>(); stack.Push(1); stack.Push(2); stack.Push(3);弹出:
Console.WriteLine( stack.Pop() );结果:
3九、集合选择指南
| 需求 | 推荐集合 |
|---|---|
| 普通列表 | List<T> |
| 需要键值查询 | Dictionary |
| 去重复数据 | HashSet |
| 排队处理 | Queue |
| 撤销操作 | Stack |
| 固定数量数据 | Array |
十、集合综合案例:学生管理系统
using System; using System.Collections.Generic; class Program { static void Main() { List<string> students = new List<string>(); while(true) { Console.WriteLine( "1.添加学生 2.查看学生 3.退出"); string choice = Console.ReadLine(); if(choice=="1") { Console.WriteLine( "输入姓名:"); string name = Console.ReadLine(); students.Add(name); } else if(choice=="2") { foreach(var s in students) { Console.WriteLine(s); } } else { break; } } } }运行效果:
1.添加学生 2.查看学生 3.退出 输入: 1 姓名: 小明 查看: 小明