System.Collections.Generic 是 .NET Core(以及 .NET Framework)中的一个基础命名空间,它提供了一系列泛型集合类(Generic Collections)。
通俗解释
你可以把它想象成一个“工具箱”,里面装着各种高效、类型安全的容器(比如列表、字典、队列等),专门用来存储和管理数据。
为什么用泛型集合?
在早期的 .NET 版本中,集合类(如 ArrayList)存储的是 object 类型,这意味着:
类型不安全:你可以往 ArrayList 里塞任何东西(比如数字、字符串混在一起),取出来时还要强制转换,容易出错。
性能较差:因为每次存取都要进行类型转换,影响运行速度。
而 泛型集合 解决了这些问题:
类型安全:声明一个 List,就只能存整数,放其他类型会直接报错。
性能更高:不需要类型转换,运行更快。
常用的泛型集合类
List
动态数组(可增删改查)
List names = new List { "张三", "李四" };
Dictionary
键值对存储(快速查找)
Dictionary idToName = new Dictionary { {1, "张三"}, {2, "李四"} };
Queue
先进先出(FIFO)队列
Queue queue = new Queue(); queue.Enqueue(1); queue.Dequeue();
Stack
后进先出(LIFO)栈
Stack stack = new Stack(); stack.Push("A"); stack.Pop();
HashSet
无重复元素的集合
HashSet numbers = new HashSet { 1, 2, 3 };
实际项目中的应用
1. List(动态数组)
场景:存储一组数据,比如用户列表、商品清单。
List invoices = new List();
invoices.Add(new Invoice { Id = 1, Amount = 100 });
foreach (var invoice in invoices)
{
Console.WriteLine($"发票ID: {invoice.Id}, 金额: {invoice.Amount}");
}
2. Dictionary(键值对)
场景:快速查找数据,比如用ID查用户信息。
Dictionary taxRates = new Dictionary
{
{1, "6%"}, {2, "9%"}, {3, "13%"}
};
string rate = taxRates[1]; // 直接获取税率
3. Queue(队列)
场景:任务调度,比如按顺序处理发票。
Queue processingQueue = new Queue();
processingQueue.Enqueue(invoice1);
processingQueue.Enqueue(invoice2);
while (processingQueue.Count > 0)
{
var currentInvoice = processingQueue.Dequeue();
ProcessInvoice(currentInvoice); // 处理发票
}
对比非泛型集合(旧方式)
1. 存储类型
ArrayList 只能存 object,可能混入不同类型
List 只能存指定类型(如 int、string)
2. 类型安全
ArrayList 不安全(需要强制转换)❌
List 安全(编译器检查)✅
3. 性能
ArrayList 较慢(频繁类型转换)⚠️
List 更快(直接操作数据) ✅
例子(非泛型 vs 泛型):
// 非泛型(容易出错)
ArrayList list = new ArrayList();
list.Add(1);
list.Add("Hello"); // 可以混入不同类型
int num = (int)list[0]; // 需要强制转换,如果放错类型会崩溃
// 泛型(安全高效)
List list = new List();
list.Add(1);
// list.Add("Hello"); // 编译错误!类型不匹配
int num = list[0]; // 直接使用,无需转换
总结
System.Collections.Generic 是 .NET 中管理数据的“瑞士军刀”,提供了一系列高效、类型安全的集合类。
核心优势:避免类型错误、提升性能、代码更清晰。
适用场景:几乎所有需要存储和管理数据的场景(如列表、字典、队列等)。
在面试中,你可以结合项目经验举例,比如:“在开票系统中,我用 List 存储发票数据,用 Dictionary 快速查找税率,这样既安全又高效。”