位置: 文档库 > C#(.NET) > 文档下载预览

《介绍C# List<T>用法详解.doc》

1. 下载的文档为doc格式,下载后可用word或者wps进行编辑;

2. 将本文以doc文档格式下载到电脑,方便收藏和打印;

3. 下载后的文档,内容与下面显示的完全一致,下载之前请确认下面内容是否您想要的,是否完整.

点击下载文档

介绍C# List<T>用法详解.doc

《介绍C# List用法详解》

在C#开发中,集合类型是处理数据存储与操作的核心工具。其中,泛型集合`List`因其灵活性和高效性,成为开发者最常用的动态数组实现。本文将系统解析`List`的核心特性、常用方法及高级应用场景,帮助开发者全面掌握这一关键数据结构。

一、List基础概念

`List`是.NET Framework中`System.Collections.Generic`命名空间下的泛型集合类,用于存储强类型元素的动态数组。相比传统数组,它具有动态扩容、类型安全、内置方法丰富等优势。

1.1 创建List实例

通过构造函数可创建空列表或指定初始容量:

// 创建空列表
List names = new List();

// 创建包含初始元素的列表
List numbers = new List { 1, 2, 3 };

// 指定初始容量(避免频繁扩容)
List values = new List(100);

1.2 容量管理机制

`List`内部使用数组存储数据,当元素数量超过当前容量时,会自动创建新数组(通常扩容为当前容量的2倍)。可通过`Capacity`属性获取或设置容量,`Count`属性获取实际元素数量:

List chars = new List();
chars.Add('a');
chars.Add('b');

Console.WriteLine($"Count: {chars.Count}");  // 输出2
Console.WriteLine($"Capacity: {chars.Capacity}");  // 输出4(默认初始容量)

二、核心操作方法

`List`提供了丰富的成员方法,涵盖增删改查、排序、转换等操作。

2.1 添加元素

使用`Add()`在末尾添加单个元素,`AddRange()`添加集合:

List fruits = new List();
fruits.Add("Apple");
fruits.AddRange(new[] { "Banana", "Orange" });

2.2 插入元素

`Insert(index, item)`在指定位置插入元素:

List digits = new List { 1, 3, 4 };
digits.Insert(1, 2);  // 结果为[1,2,3,4]

2.3 删除元素

提供多种删除方式:

List colors = new List { "Red", "Green", "Blue" };

// 按索引删除
colors.RemoveAt(0);  // 删除"Red"

// 按值删除(首次匹配)
colors.Remove("Green");

// 删除所有匹配项
colors.RemoveAll(c => c.StartsWith("B"));  // 删除"Blue"

2.4 查找元素

常用查找方法:

List people = new List
{
    new Person { Name = "Alice", Age = 25 },
    new Person { Name = "Bob", Age = 30 }
};

// 查找索引(不存在返回-1)
int index = people.FindIndex(p => p.Age > 28);  // 返回1

// 查找第一个匹配项(不存在返回default)
Person person = people.Find(p => p.Name == "Alice");

// 判断是否存在
bool exists = people.Exists(p => p.Age == 25);

2.5 排序操作

支持自然排序和自定义排序:

List numbers = new List { 5, 2, 8, 1 };

// 升序排序
numbers.Sort();  // [1,2,5,8]

// 降序排序
numbers.Sort((a, b) => b.CompareTo(a));  // [8,5,2,1]

// 自定义对象排序
List products = new List
{
    new Product { Name = "Laptop", Price = 999 },
    new Product { Name = "Phone", Price = 699 }
};
products.Sort((x, y) => x.Price.CompareTo(y.Price));

三、高级应用场景

3.1 批量操作优化

对于大数据量操作,`AddRange()`比多次`Add()`更高效:

// 低效方式
List slowList = new List();
for (int i = 0; i  fastList = new List(10000);
var temp = new List();
for (int i = 0; i 

3.2 自定义比较器

实现`IComparer`接口可定义复杂排序规则:

public class AgeComparer : IComparer
{
    public int Compare(Person x, Person y)
    {
        return x.Age.CompareTo(y.Age);
    }
}

// 使用自定义比较器
List people = ...;
people.Sort(new AgeComparer());

3.3 线程安全处理

多线程环境下需使用锁机制:

private readonly object _lock = new object();
private List _sharedList = new List();

public void AddSafely(int value)
{
    lock (_lock)
    {
        _sharedList.Add(value);
    }
}

3.4 转换为其他集合

`List`可方便转换为数组、字典等:

List cities = new List { "NY", "LA", "CHI" };

// 转为数组
string[] cityArray = cities.ToArray();

// 转为字典(需配合Select)
var cityDict = cities.Select((city, index) => new { Index = index, City = city })
                     .ToDictionary(x => x.Index, x => x.City);

四、性能优化建议

4.1 合理设置初始容量

预先知道元素数量时,指定初始容量可避免多次扩容:

// 假设需要存储1000个元素
List dataPoints = new List(1000);

4.2 使用结构体减少内存

对于小型值类型,使用结构体比类更节省内存:

public struct Point
{
    public int X;
    public int Y;
}

List points = new List();

4.3 避免频繁修改操作

在循环中频繁插入/删除会导致性能下降,可考虑:

  • 先收集所有操作,最后统一执行
  • 使用`LinkedList`替代(当操作集中在头部/尾部时)

五、常见问题解决方案

5.1 索引越界异常

访问前应检查索引范围:

if (index >= 0 && index 

5.2 空引用异常

使用`null`条件运算符或显式检查:

// 方法1:使用null条件运算符
var first = myList?.FirstOrDefault();

// 方法2:显式检查
if (myList != null && myList.Count > 0)
{
    var first = myList[0];
}

5.3 性能对比:List vs Array

特性 List Array
动态扩容 支持 不支持
类型安全 支持 支持(非泛型数组不支持)
内存占用 稍高(存储容量信息) 更低
访问速度 O(1) O(1)

六、扩展方法实践

可为`List`添加自定义扩展方法:

public static class ListExtensions
{
    public static void Shuffle(this List list)
    {
        Random rng = new Random();
        int n = list.Count;
        while (n > 1)
        {
            n--;
            int k = rng.Next(n + 1);
            T value = list[k];
            list[k] = list[n];
            list[n] = value;
        }
    }
}

// 使用
List cards = Enumerable.Range(1, 52).ToList();
cards.Shuffle();

关键词:C#、List、泛型集合、动态数组、集合操作、性能优化、线程安全、扩展方法

简介:本文全面解析C#中List集合的用法,涵盖基础创建、核心操作方法、高级应用场景、性能优化技巧及常见问题解决方案。通过代码示例和对比分析,帮助开发者深入理解List的特性,掌握其在不同场景下的最佳实践。

《介绍C# List<T>用法详解.doc》
将本文以doc文档格式下载到电脑,方便收藏和打印
推荐度:
点击下载文档