列表的基本用法

创建列表

1
2
3
4
5
6

// 创建空列表
List<int> numbers = new List<int>();

// 创建并初始化列表
List<string> names = new List<string> { "Alice", "Bob", "Charlie" };

添加元素

1
2
3

numbers.Add(10); // 在末尾添加单个元素
numbers.AddRange(new int[] { 20, 30 }); // 添加多个元素

访问元素

1
2

int first = numbers[0]; // 通过索引访问(类似数组)

删除元素

1
2
3
4

numbers.Remove(20); // 删除第一个匹配的元素
numbers.RemoveAt(0); // 删除指定索引的元素
numbers.Clear(); // 清空列表

遍历列表

1
2
3
4
5

foreach (int num in numbers)
{
Console.WriteLine(num);
}

常用属性和方法

属性/方法 说明
Count 获取列表中的元素数量(实际存储的元素数)
Capacity 获取或设置列表的内部容量(动态扩容时的预分配大小)
Add(T item) 在列表末尾添加元素
Insert(int index, T item) 在指定位置插入元素
Contains(T item) 检查元素是否存在
IndexOf(T item) 返回元素的第一个匹配项的索引
Sort() 对列表元素排序(需元素实现 IComparable 接口或提供自定义比较器)
Find(Predicate<T> match) 查找第一个符合条件的元素
ForEach(Action<T> action) 对每个元素执行操作

示例代码

动态操作列表

1
2
3
4
5
6
7
8
9
10

List<string> fruits = new List<string> { "Apple", "Banana" };
fruits.Add("Cherry");
fruits.Insert(1, "Mango");
fruits.Remove("Banana");

foreach (string fruit in fruits)
{
Console.WriteLine(fruit); // 输出:Apple, Mango, Cherry
}

使用 LINQ 查询列表

1
2
3
4

List<int> numbers = new List<int> { 5, 2, 8, 1, 3 };
var evenNumbers = numbers.Where(n => n % 2 == 0).ToList(); // 筛选偶数
Console.WriteLine(string.Join(", ", evenNumbers)); // 输出:2, 8

最佳实践
预分配容量
如果已知元素数量,初始化时指定容量以减少动态扩容的开销:

1
2
3
4

List<int> list = new List<int>(100); // 初始容量为 100
避免频繁插入/删除
若需要频繁在中间插入或删除元素,考虑使用 LinkedList<T>。

使用集合初始化器
简化代码:

1
2
3
4

List<int> numbers = new List<int> { 1, 2, 3 };
结合 LINQ
使用 LINQ 方法(如 Where, Select, OrderBy)简化复杂查询。

常见问题
如何高效复制列表?

1
2
3

List<int> copy = new List<int>(originalList); // 通过构造函数复制
List<int> copy2 = originalList.ToList(); // 使用 LINQ 的 ToList()

如何将列表转换为数组?

1
2

int[] array = numbers.ToArray();

总结

List<T> 是 C# 中最常用的集合类型之一,适用于需要动态调整大小的场景。通过灵活的方法和 LINQ 集成,它可以高效处理大多数集合操作。在使用时需注意容量管理和性能优化,结合具体需求选择合适的数据结构。