C#泛型集合List 常用方法、LINQ整合与业务实战场景
AI 概述
本文为C# List完整实操指南,该泛型集合位于System.Collections.Generic,具备类型安全、动态扩容、支持索引访问等特性。文中展示创建、增删改查等基础用法,梳理常用API;讲解核心性能优化手段,推荐预分配容量、优先批量操作。对比List与数组、LinkedList适用场景,指出列表中间频繁增删存在数据移动开销。开发需结合业务合理选型,搭配LINQ使用,规避潜在性能问题。
目录
文章目录隐藏

在 C#中,List<T> 是一个非常常用的泛型集合类,属于 System.Collections.Generic 命名空间。很多人只是简单调用 Add、foreach 完成业务,但并不清楚它底层扩容机制、读写性能短板,什么时候该换数组、什么时候改用链表。List<T> 提供了一种灵活的方式来存储和管理一组元素,这些元素可以是任何类型的对象。今天整理一份完整的 List<T>实操指南,从基础用法到性能优化一次性讲明白,日常开发直接当作参考手册使用。
List<T>是什么?
List<T> 是 C# 中最常用的泛型集合类,位于 System.Collections.Generic 命名空间。它代表一个强类型、可动态调整大小的对象列表,提供了丰富的操作方法,是数组(Array)的现代化替代品。
List<T> 的核心特性
- 类型安全:泛型参数
T确保集合中只能存储指定类型的元素。 - 动态扩容:无需预先指定大小,添加元素时自动扩展容量。
- 索引访问:支持通过下标(从 0 开始)快速访问元素,如
list[0]。 - 丰富的方法:提供 Add、Remove、Find、Sort、ForEach 等常用操作。
- LINQ 支持:可与 LINQ 无缝集成,进行查询、筛选、投影等操作。
基本用法示例
创建与初始化
// 创建空列表
List<string> names = new List<string>();
// 创建并初始化
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
// 指定初始容量(优化性能)
List<double> values = new List<double>(100);
添加元素
List<string> fruits = new List<string>();
fruits.Add("Apple"); // 添加单个元素
fruits.AddRange(new string[] { "Banana", "Orange" }); // 添加多个元素
fruits.Insert(1, "Mango"); // 在指定位置插入
访问与修改
List<int> scores = new List<int> { 85, 92, 78 };
int firstScore = scores[0]; // 85
scores[1] = 95; // 修改第二个元素
// 遍历列表
foreach (int score in scores)
{
Console.WriteLine(score);
}
// 使用 ForEach 方法
scores.ForEach(s => Console.WriteLine($"Score: {s}"));
删除元素
List<string> colors = new List<string> { "Red", "Green", "Blue", "Red" };
colors.Remove("Red"); // 删除第一个匹配项
colors.RemoveAt(0); // 删除指定位置的元素
colors.RemoveAll(c => c.StartsWith("B")); // 删除所有满足条件的元素
colors.Clear(); // 清空列表
常用方法与属性
| 方法/属性 | 说明 | 示例 |
|---|---|---|
Count |
获取元素数量 | int count = list.Count; |
Add(T item) |
添加元素到末尾 | list.Add("item"); |
AddRange(IEnumerable<T>) |
添加多个元素 | list.AddRange(array); |
Insert(int index, T item) |
在指定位置插入 | list.Insert(0, "first"); |
Remove(T item) |
删除第一个匹配项 | list.Remove("target"); |
RemoveAt(int index) |
删除指定位置元素 | list.RemoveAt(0); |
Contains(T item) |
检查是否包含元素 | bool has = list.Contains("x"); |
IndexOf(T item) |
查找元素索引 | int idx = list.IndexOf("x"); |
Sort() |
排序(默认升序) | list.Sort(); |
Reverse() |
反转元素顺序 | list.Reverse(); |
ToArray() |
转换为数组 | T[] arr = list.ToArray(); |
性能优化技巧
- 预分配容量:如果知道大致元素数量,创建时指定初始容量可减少扩容开销。
- 避免频繁插入/删除:在列表中间频繁插入或删除元素会导致大量数据移动,考虑使用
LinkedList<T>。 - 使用
Capacity属性:一次性添加大量元素前,可设置合适的容量。 - 批量操作:使用
AddRange而非循环Add。 - 考虑只读集合:如果不需修改,使用
AsReadOnly()返回只读视图。
与数组(Array)的比较
| 特性 | List<T> | Array |
|---|---|---|
| 大小 | 动态调整 | 固定长度 |
| 性能 | 插入/删除可能需移动元素 | 随机访问最快 |
| 内存 | 有额外开销(容量管理) | 最紧凑 |
| 功能 | 丰富的内置方法 | 基本操作 |
| 适用场景 | 元素数量变化频繁 | 大小固定、性能要求高 |
实际应用场景
数据收集与处理
// 从数据库读取用户列表
List<User> users = dbContext.Users.ToList();
// 使用 LINQ 筛选
List<User> activeUsers = users
.Where(u => u.IsActive)
.OrderBy(u => u.Name)
.ToList();
缓存管理
public class CacheManager<T>
{
private List<T> _cache = new List<T>();
public void AddItem(T item) => _cache.Add(item);
public T GetItem(Predicate<T> match) => _cache.Find(match);
}
结语
绝大多数场景下List<T>都是我们处理可变序列的第一选择。但不能无脑使用,明白它动态扩容的代价、中间增删数据的性能缺陷,结合业务场景权衡数组、LinkedList 等其他集合。熟练用好List<T>内置方法搭配 LINQ,既能简化代码,也能避开很多隐性性能坑,写出更规范高效的 C# 代码。
以上关于C#泛型集合List
声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 admin@mybj123.com 进行投诉反馈,一经查实,立即处理!
重要:如软件存在付费、会员、充值等,均属软件开发者或所属公司行为,与本站无关,网友需自行判断
码云笔记 » C#泛型集合List 常用方法、LINQ整合与业务实战场景
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 admin@mybj123.com 进行投诉反馈,一经查实,立即处理!
重要:如软件存在付费、会员、充值等,均属软件开发者或所属公司行为,与本站无关,网友需自行判断
码云笔记 » C#泛型集合List
微信
支付宝