C# List<T>的用法小结


在C#中,`List` 是一个泛型集合,它提供了对对象的动态数组的支持。这里是一个关于 `List` 用法的小结:

### 创建List

你可以通过指定元素类型来创建一个 `List` 的实例。


List<int> numbers = new List<int>();
List<string> names = new List<string>();

### 添加元素

- 使用 `Add` 方法添加单个元素。


numbers.Add(1);
names.Add("Alice");

- 使用 `AddRange` 方法添加元素集合(需要传递一个 `IEnumerable` 类型的集合)。


List<int> moreNumbers = new List<int> { 2, 3, 4 };
numbers.AddRange(moreNumbers);

### 访问元素

- 通过索引访问元素(索引从0开始)。


int firstNumber = numbers[0];
string firstName = names[0];

- 使用 `ElementAt` 或 `ElementAtOrDefault` 方法(更安全,但可能稍慢)。


int firstNumberSafe = numbers.ElementAt(0); // 如果索引无效,会抛出异常
int? maybeFirstNumber = numbers.ElementAtOrDefault(0); // 如果索引无效,返回null(对于可空类型)

### 遍历List

- 使用 `foreach` 循环。


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

foreach (string name in names)
{
    Console.WriteLine(name);
}

- 使用 `for` 循环(基于索引)。


for (int i = 0; i < numbers.Count; i++)
{
    Console.WriteLine(numbers[i]);
}

### 搜索元素

- 使用 `Contains` 方法检查列表中是否包含某个元素。


bool hasAlice = names.Contains("Alice");

- 使用 `FindIndex` 或 `Find` 方法找到元素的索引或元素本身。


int index = names.FindIndex(name => name == "Alice");
string foundName = names.Find(name => name == "Alice");

### 移除元素

- 使用 `Remove` 方法移除指定的元素(如果有多个相同的元素,只移除第一个)。


names.Remove("Alice");

- 使用 `RemoveAll` 方法移除所有匹配条件的元素。


names.RemoveAll(name => name.StartsWith("A"));

- 移除指定索引的元素。


names.RemoveAt(0); // 移除第一个元素

### 排序和反转

- 使用 `Sort` 方法对列表进行排序(默认是升序)。


numbers.Sort();

- 使用 `Reverse` 方法反转列表中的元素顺序。


numbers.Reverse();

### 容量和计数

- `Count` 属性表示列表中元素的数量。


int count = numbers.Count;

- `Capacity` 属性表示列表的当前容量(即列表可以存储的元素数量,这个值可能会随着添加元素而自动增加)。


int capacity = numbers.Capacity;

- 使用 `TrimExcess` 方法减少容量到实际元素数量(可选操作,用于优化内存使用)。


numbers.TrimExcess();

### 注意事项

- `List` 不是线程安全的。如果多个线程同时访问列表,并且至少有一个线程修改列表,则需要外部同步。

- `List` 支持动态扩容,但频繁扩容可能会影响性能,因此可以预分配足够的容量以减少扩容次数。

这是 `List` 的一些基本用法和注意事项。希望这对你有所帮助!