在 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 姓名: 小明 查看: 小明













