List集合 #
一、List概述 #
List
1.1 特点 #
- 动态大小
- 支持索引访问
- 类型安全
- 实现IList
接口
1.2 创建List #
csharp
var list1 = new List<int>();
var list2 = new List<int> { 1, 2, 3, 4, 5 };
var list3 = new List<int>(10);
var list4 = new List<int>(new[] { 1, 2, 3 });
二、添加元素 #
2.1 Add方法 #
csharp
var list = new List<string>();
list.Add("张三");
list.Add("李四");
list.Add("王五");
2.2 AddRange方法 #
csharp
var list = new List<int> { 1, 2, 3 };
var more = new[] { 4, 5, 6 };
list.AddRange(more);
list.AddRange(new[] { 7, 8, 9 });
2.3 Insert方法 #
csharp
var list = new List<string> { "李四", "王五" };
list.Insert(0, "张三");
list.Insert(2, "赵六");
2.4 InsertRange方法 #
csharp
var list = new List<int> { 1, 5 };
list.InsertRange(1, new[] { 2, 3, 4 });
三、访问元素 #
3.1 索引访问 #
csharp
var list = new List<string> { "张三", "李四", "王五" };
string first = list[0];
string last = list[^1];
string secondLast = list[^2];
3.2 遍历 #
csharp
var list = new List<int> { 1, 2, 3, 4, 5 };
for (int i = 0; i < list.Count; i++)
{
Console.WriteLine(list[i]);
}
foreach (var item in list)
{
Console.WriteLine(item);
}
3.3 切片(C# 8+) #
csharp
var list = new List<int> { 1, 2, 3, 4, 5 };
var firstThree = list[0..3];
var lastTwo = list[^2..];
var middle = list[1..4];
四、删除元素 #
4.1 Remove方法 #
csharp
var list = new List<string> { "张三", "李四", "王五" };
bool removed = list.Remove("李四");
bool notFound = list.Remove("赵六");
4.2 RemoveAt方法 #
csharp
var list = new List<string> { "张三", "李四", "王五" };
list.RemoveAt(0);
list.RemoveAt(list.Count - 1);
4.3 RemoveRange方法 #
csharp
var list = new List<int> { 1, 2, 3, 4, 5 };
list.RemoveRange(1, 2);
4.4 RemoveAll方法 #
csharp
var list = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int removed = list.RemoveAll(n => n % 2 == 0);
int removed2 = list.RemoveAll(n => n > 5);
4.5 Clear方法 #
csharp
var list = new List<int> { 1, 2, 3 };
list.Clear();
五、查找元素 #
5.1 Contains方法 #
csharp
var list = new List<string> { "张三", "李四", "王五" };
bool hasZhangSan = list.Contains("张三");
bool hasNotFound = list.Contains("赵六");
5.2 IndexOf方法 #
csharp
var list = new List<string> { "张三", "李四", "王五", "李四" };
int first = list.IndexOf("李四");
int last = list.LastIndexOf("李四");
int notFound = list.IndexOf("赵六");
5.3 Find方法 #
csharp
var list = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int firstEven = list.Find(n => n % 2 == 0);
int lastEven = list.FindLast(n => n % 2 == 0);
int firstGreaterThan5 = list.Find(n => n > 5);
5.4 FindAll方法 #
csharp
var list = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
var evens = list.FindAll(n => n % 2 == 0);
var greaterThan5 = list.FindAll(n => n > 5);
5.5 FindIndex方法 #
csharp
var list = new List<int> { 1, 2, 3, 4, 5 };
int firstEvenIndex = list.FindIndex(n => n % 2 == 0);
int lastEvenIndex = list.FindLastIndex(n => n % 2 == 0);
5.6 Exists方法 #
csharp
var list = new List<int> { 1, 2, 3, 4, 5 };
bool hasEven = list.Exists(n => n % 2 == 0);
bool hasGreaterThan10 = list.Exists(n => n > 10);
5.7 TrueForAll方法 #
csharp
var list = new List<int> { 2, 4, 6, 8, 10 };
bool allEven = list.TrueForAll(n => n % 2 == 0);
bool allPositive = list.TrueForAll(n => n > 0);
六、排序 #
6.1 Sort方法 #
csharp
var list = new List<int> { 5, 2, 8, 1, 9, 3 };
list.Sort();
var names = new List<string> { "张三", "李四", "王五" };
names.Sort();
6.2 自定义排序 #
csharp
var list = new List<int> { 5, 2, 8, 1, 9, 3 };
list.Sort((a, b) => b.CompareTo(a));
var people = new List<Person>
{
new Person { Name = "张三", Age = 25 },
new Person { Name = "李四", Age = 30 },
new Person { Name = "王五", Age = 20 }
};
people.Sort((a, b) => a.Age.CompareTo(b.Age));
people.Sort((a, b) => string.Compare(a.Name, b.Name));
6.3 Reverse方法 #
csharp
var list = new List<int> { 1, 2, 3, 4, 5 };
list.Reverse();
6.4 OrderBy(LINQ) #
csharp
var list = new List<int> { 5, 2, 8, 1, 9, 3 };
var sorted = list.OrderBy(n => n).ToList();
var descending = list.OrderByDescending(n => n).ToList();
七、转换 #
7.1 ToArray方法 #
csharp
var list = new List<int> { 1, 2, 3, 4, 5 };
int[] array = list.ToArray();
7.2 ConvertAll方法 #
csharp
var numbers = new List<int> { 1, 2, 3, 4, 5 };
var strings = numbers.ConvertAll(n => n.ToString());
var doubled = numbers.ConvertAll(n => n * 2);
7.3 GetRange方法 #
csharp
var list = new List<int> { 1, 2, 3, 4, 5 };
var subList = list.GetRange(1, 3);
7.4 AsReadOnly方法 #
csharp
var list = new List<int> { 1, 2, 3 };
IReadOnlyList<int> readOnly = list.AsReadOnly();
八、容量管理 #
8.1 Capacity属性 #
csharp
var list = new List<int>();
Console.WriteLine($"初始容量:{list.Capacity}");
for (int i = 0; i < 10; i++)
{
list.Add(i);
Console.WriteLine($"Count={list.Count}, Capacity={list.Capacity}");
}
8.2 预设容量 #
csharp
var list = new List<int>(1000);
list.EnsureCapacity(1000);
list.TrimExcess();
九、实战示例 #
9.1 分页列表 #
csharp
public static List<T> GetPage<T>(List<T> list, int page, int pageSize)
{
return list.Skip((page - 1) * pageSize).Take(pageSize).ToList();
}
var items = Enumerable.Range(1, 100).ToList();
var page1 = GetPage(items, 1, 10);
var page2 = GetPage(items, 2, 10);
9.2 去重 #
csharp
public static List<T> Distinct<T>(List<T> list)
{
return list.Distinct().ToList();
}
public static List<T> DistinctBy<T, TKey>(List<T> list, Func<T, TKey> keySelector)
{
return list.GroupBy(keySelector).Select(g => g.First()).ToList();
}
9.3 分组 #
csharp
var people = new List<Person>
{
new Person { Name = "张三", Age = 25, City = "北京" },
new Person { Name = "李四", Age = 30, City = "上海" },
new Person { Name = "王五", Age = 25, City = "北京" }
};
var byAge = people.GroupBy(p => p.Age);
var byCity = people.GroupBy(p => p.City);
十、总结 #
List
| 操作 | 方法 |
|---|---|
| 添加 | Add, AddRange, Insert |
| 删除 | Remove, RemoveAt, RemoveAll |
| 查找 | Find, FindAll, Contains |
| 排序 | Sort, OrderBy |
| 转换 | ToArray, ConvertAll |
下一步,让我们学习Set集合!
最后更新:2026-03-26