编辑
2025-09-22
C#
00

目录

概念和特点
应用场景
方法与属性
常用方法
常用属性
示例
基本操作示例
列表初始化和范围添加
查找和排序
使用LINQ与列表
查找和搜索
排序和反转
LINQ操作
实际应用示例
学生成绩管理
购物车实现
性能考虑
总结

概念和特点

在 C# 中,List<T> 是一种泛型集合,它提供了一组强大的方法来管理一组有序的对象。列表的特点包括:

  • 动态大小:与数组不同,列表的大小会根据需要动态增长或缩小。
  • 同类型元素:列表中只能包含一种类型的元素,这个类型在声明时通过泛型参数 T 指定。
  • 随机访问:列表支持通过索引快速访问元素。
  • 灵活的操作:列表提供了丰富的方法,如添加、删除、查找、排序等。

应用场景

  • 数据集合管理:当你需要一个可以动态调整大小的数据集合时,列表是一个理想的选择。
  • 数据库查询结果:数据库查询通常返回可变大小的数据集,列表可以方便地存储这些结果。
  • UI元素管理:在用户界面编程中,列表可以用来管理动态的控件集合,如下拉菜单项。

方法与属性

常用方法

  • Add(T item):在列表的末尾添加一个元素。
  • AddRange(IEnumerable<T> collection):添加一个元素集合到列表的末尾。
  • Remove(T item):移除列表中第一个匹配的元素。
  • RemoveAt(int index):移除指定索引处的元素。
  • Clear():移除列表中所有的元素。
  • Contains(T item):判断元素是否在列表中。
  • IndexOf(T item):查找元素在列表中第一次出现的位置。
  • Sort():对列表中的元素进行排序。
  • Reverse():反转列表中的元素顺序。
  • Find(Predicate<T> match):查找符合条件的第一个元素。
  • FindAll(Predicate<T> match):查找符合条件的所有元素。
  • ToArray():将列表转换为数组。
  • Insert(int index, T item):在指定位置插入一个元素。
  • CopyTo(T[] array, int arrayIndex):将列表中的元素复制到数组中。

常用属性

  • Count:获取列表中的元素个数。
  • Capacity:获取或设置列表可以存储的元素总数。
  • Item[int index](索引器):获取或设置指定索引处的元素。

示例

基本操作示例

C#
// 创建一个整数列表 List<int> numbers = new List<int>(); // 添加元素 numbers.Add(1); numbers.Add(2); numbers.Add(3); // 移除元素 numbers.Remove(2); // 遍历列表 foreach (int number in numbers) { Console.WriteLine(number); } // 输出元素个数 Console.WriteLine("Count: " + numbers.Count);

image.png

列表初始化和范围添加

C#
// 使用集合初始化器初始化列表 List<string> fruits = new List<string> { "Apple", "Banana", "Cherry" }; // 添加另一个列表的元素 List<string> moreFruits = new List<string> { "Date", "Elderberry" }; fruits.AddRange(moreFruits); // 输出所有水果 fruits.ForEach(fruit => Console.WriteLine(fruit));

image.png

查找和排序

C#
// 创建并初始化一个整数列表 List<int> scores = new List<int> { 90, 85, 80, 75, 100 }; // 查找分数大于等于85的所有成绩 List<int> highScores = scores.FindAll(score => score >= 85); // 输出高分 highScores.ForEach(score => Console.WriteLine("High score: " + score)); // 排序列表 scores.Sort(); // 输出排序后的成绩 scores.ForEach(score => Console.WriteLine("Score: " + score));

image.png

使用LINQ与列表

查找和搜索

C#
List<int> numbers = new List<int> { 1, 3, 5, 7, 9, 3, 5 }; // 检查元素是否存在 bool hasThree = numbers.Contains(3); // true Console.WriteLine(hasThree); // 查找元素索引 int firstIndex = numbers.IndexOf(5); // 2 Console.WriteLine(firstIndex); int lastIndex = numbers.LastIndexOf(5); // 6 Console.WriteLine(lastIndex); // 使用谓词查找元素 int firstGreaterThanFour = numbers.Find(x => x > 4); // 5 Console.WriteLine(firstGreaterThanFour); List<int> allGreaterThanFour = numbers.FindAll(x => x > 4); // [5, 7, 9, 5] Console.WriteLine(allGreaterThanFour);

image.png

排序和反转

C#
List<string> names = new List<string> { "Zack", "Alice", "Bob", "Charlie" }; // 排序 names.Sort(); // ["Alice", "Bob", "Charlie", "Zack"] Console.WriteLine(string.Join(", ", names)); // 反转 names.Reverse(); // ["Zack", "Charlie", "Bob", "Alice"] Console.WriteLine(string.Join(", ", names)); // 自定义排序 names.Sort((a, b) => b.CompareTo(a)); // 降序排序 Console.WriteLine(string.Join(", ", names));

image.png

LINQ操作

C#
List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; // 筛选 var evenNumbers = numbers.Where(n => n % 2 == 0).ToList(); Console.WriteLine("偶数:"); foreach (var number in evenNumbers) { Console.WriteLine(number); } // 转换 var squared = numbers.Select(n => n * n).ToList(); Console.WriteLine("平方:"); foreach (var number in squared) { Console.WriteLine(number); } // 聚合 var sum = numbers.Sum(); var average = numbers.Average(); var max = numbers.Max(); Console.WriteLine($"总和:{sum}"); Console.WriteLine($"平均值:{average}"); Console.WriteLine($"最大值:{max}");

image.png

实际应用示例

学生成绩管理

C#
namespace AppList { public class Student { public string Name { get; set; } public int Score { get; set; } } internal class Program { static void Main(string[] args) { // 创建学生列表 List<Student> students = new List<Student> { new Student { Name = "Alice", Score = 95 }, new Student { Name = "Bob", Score = 85 }, new Student { Name = "Charlie", Score = 90 } }; // 查找成绩最高的学生 var topStudent = students.OrderByDescending(s => s.Score).First(); // 计算平均分 var averageScore = students.Average(s => s.Score); // 找出及格的学生 var passedStudents = students.FindAll(s => s.Score >= 60); Console.WriteLine($"最高分学生:{topStudent.Name},成绩:{topStudent.Score}"); Console.WriteLine($"平均分:{averageScore}"); Console.WriteLine("及格学生:"); foreach (var student in passedStudents) { Console.WriteLine($"{student.Name},成绩:{student.Score}"); } } } }

image.png

购物车实现

C#
namespace AppList { public class CartItem { public string ProductName { get; set; } public decimal Price { get; set; } public int Quantity { get; set; } } internal class Program { static void Main(string[] args) { List<CartItem> cart = new List<CartItem>(); // 添加商品到购物车 cart.Add(new CartItem { ProductName = "iPhone", Price = 999.99m, Quantity = 1 }); // 计算总价 decimal total = cart.Sum(item => item.Price * item.Quantity); // 查找特定商品 var phone = cart.Find(item => item.ProductName.Contains("iPhone")); Console.WriteLine($"Total: {total}"); Console.WriteLine($"Phone: {phone?.ProductName}"); } } }

image.png

性能考虑

  • 当频繁在列表开头插入或删除元素时,考虑使用LinkedList
  • 预知列表大小时,通过构造函数指定初始容量可以提高性能
  • 大量随机访问操作时,List比其他集合类型更高效
  • 需要唯一元素时,考虑使用HashSet

总结

List是C#中最常用的集合类型之一,它提供了强大的功能和灵活的操作方式。通过合理使用其提供的方法,可以高效地管理和操作数据。在实际开发中,根据具体需求选择合适的操作方法,可以显著提高代码的效率和可维护性。

这篇文章涵盖了List的主要特性和用法,包含了丰富的示例代码和实际应用场景。每个示例都附带了详细的注释,便于理解。如果您需要了解某个特定部分的更多细节,请随时告诉我。

本文作者:技术老小子

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!