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

《关于C#泛型列表List<T>的基本用法总结.doc》

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

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

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

点击下载文档

关于C#泛型列表List<T>的基本用法总结.doc

《关于C#泛型列表List的基本用法总结》

在C#编程中,泛型集合是处理动态数据的重要工具,其中`List`作为最常用的泛型列表类型,提供了类型安全、高效的操作方式。本文将系统总结`List`的核心特性、基本操作及高级用法,帮助开发者全面掌握其应用场景。

一、List的核心特性

1. **类型安全**:泛型参数`T`确保列表仅能存储指定类型的数据,避免装箱/拆箱开销。

2. **动态扩容**:内部基于数组实现,当容量不足时自动按1.5倍扩容(可通过`TrimExcess()`优化)。

3. **丰富方法集**:提供增删改查、排序、搜索等20+个实用方法。

4. **线程不安全**:多线程环境下需配合锁机制或使用`ConcurrentBag`。

二、基础操作详解

1. 创建与初始化

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

// 指定容量创建(避免多次扩容)
List names = new List(100);

// 集合初始化器(C# 3.0+)
List dates = new List {
    new DateTime(2023,1,1),
    DateTime.Now
};

2. 元素操作

添加元素

List people = new List();
people.Add(new Person("Alice", 25));  // 末尾添加
people.Insert(0, new Person("Bob", 30));  // 指定位置插入

删除元素

// 按值删除(首次匹配)
people.Remove(new Person("Alice", 25));  

// 按索引删除
people.RemoveAt(0);

// 条件删除(C# 8.0+)
people.RemoveAll(p => p.Age > 60);

访问元素

// 索引访问(需检查范围)
if (people.Count > 0) {
    Person first = people[0];
}

// 安全访问扩展方法
public static T SafeGet(this List list, int index, T defaultValue) {
    return index >= 0 && index 

3. 搜索与查询

// 存在性检查
bool hasAlice = people.Exists(p => p.Name == "Alice");

// 查找索引
int index = people.FindIndex(p => p.Age == 25);

// LINQ查询(需using System.Linq)
var seniors = from p in people
              where p.Age >= 65
              select p.Name;

4. 排序操作

自然排序

// 实现IComparable接口后
people.Sort();  // 调用默认比较器

// 使用Comparison委托
people.Sort((x, y) => x.Age.CompareTo(y.Age));

LINQ排序

var ordered = people.OrderBy(p => p.Name)
                    .ThenByDescending(p => p.Age)
                    .ToList();

三、高级用法解析

1. 自定义比较器

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

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

2. 批量操作

// 添加范围
string[] newNames = { "Charlie", "David" };
names.AddRange(newNames);

// 转换为数组
Person[] array = people.ToArray();

// 范围操作(C# 8.0+)
var slice = people.GetRange(1, 2);  // 从索引1开始取2个元素

3. 结构体优化

对于值类型列表,使用结构体可减少内存分配:

public struct Point {
    public int X, Y;
}

List points = new List(1000);  // 连续内存存储

4. 性能优化技巧

1. 预分配容量:`new List(initialCapacity)`

2. 避免频繁扩容:当知道大致元素数量时提前设置

3. 使用`Capacity`属性动态调整:

if (people.Count > people.Capacity * 0.9) {
    people.Capacity = people.Count * 2;
}

四、常见问题解决方案

1. 线程安全问题

private readonly object _lock = new object();

public void SafeAdd(Person p) {
    lock (_lock) {
        people.Add(p);
    }
}

2. 空引用处理

// 安全添加扩展方法
public static void SafeAddRange(this List list, IEnumerable collection) {
    if (list == null) throw new ArgumentNullException(nameof(list));
    if (collection != null) {
        list.AddRange(collection);
    }
}

3. 自定义集合操作

// 分页扩展方法
public static List Paginate(this List list, int page, int pageSize) {
    return list.Skip((page - 1) * pageSize)
               .Take(pageSize)
               .ToList();
}

五、与其它集合的对比

特性 List Array LinkedList
访问速度 O(1) O(1) O(n)
插入/删除 O(n) O(n) O(1)
内存占用 中等 固定

选择建议

• 需要随机访问且大小可变 → `List`

• 频繁中间插入/删除 → `LinkedList`

• 大小固定且性能敏感 → 数组

六、实战案例分析

案例1:数据过滤与转换

public class OrderProcessor {
    public List FilterHighValue(List orders, decimal threshold) {
        return orders.Where(o => o.Total > threshold)
                    .OrderBy(o => o.Date)
                    .ToList();
    }
}

案例2:缓存实现

public class SimpleCache {
    private readonly List> _cache = new List>();
    
    public void Add(TKey key, TValue value) {
        _cache.Add(new KeyValuePair(key, value));
    }
    
    public bool TryGetValue(TKey key, out TValue value) {
        var item = _cache.FirstOrDefault(x => Equals(x.Key, key));
        value = item.Key != null ? item.Value : default;
        return item.Key != null;
    }
}

七、最佳实践总结

1. **明确容量需求**:初始化时设置合理容量

2. **优先使用LINQ**:对于复杂查询使用LINQ to Objects

3. **避免过度封装**:简单操作直接使用List方法

4. **注意null处理**:对引用类型进行空值检查

5. **考虑不可变集合**:对于只读场景使用`ImmutableList`

关键词:C#泛型列表、List、动态扩容、类型安全、集合操作、LINQ排序、线程安全、性能优化、集合对比、实战案例

简介:本文全面总结了C#中List泛型列表的核心特性、基础操作和高级用法,涵盖创建初始化、元素增删改查、排序搜索、性能优化等关键知识点,并通过实战案例和对比分析帮助开发者高效使用该集合类型。

《关于C#泛型列表List<T>的基本用法总结.doc》
将本文以doc文档格式下载到电脑,方便收藏和打印
推荐度:
点击下载文档