C# - List<T>
List<T>
是一个强类型对象的集合,可以通过索引访问,并具有排序、搜索和修改列表的方法。它是 ArrayList 的泛型版本,属于 System.Collections.Generic
命名空间。
List<T> 特性
List<T>
等同于 ArrayList,它实现了 IList<T>。- 它属于
System.Collections.Generic
命名空间。 List<T>
可以包含指定类型的元素。它提供编译时类型检查,并且由于它是泛型,因此不执行装箱-拆箱操作。- 可以使用
Add()
、AddRange()
方法或集合初始化器语法添加元素。 - 可以通过传递索引来访问元素,例如
myList[0]
。索引从零开始。 List<T>
的性能比ArrayList
更快,并且更不容易出错。
创建 List
List<T>
是一个泛型集合,因此您需要为它可以存储的数据类型指定一个类型参数。以下示例演示如何创建列表并添加元素。
List<int> primeNumbers = new List<int>();
primeNumbers.Add(2); // adding elements using add() method
primeNumbers.Add(3);
primeNumbers.Add(5);
primeNumbers.Add(7);
var cities = new List<string>();
cities.Add("New York");
cities.Add("London");
cities.Add("Mumbai");
cities.Add("Chicago");
cities.Add(null);// nulls are allowed for reference type list
//adding elements using collection-initializer syntax
var bigCities = new List<string>()
{
"New York",
"London",
"Mumbai",
"Chicago"
};
在上面的示例中,List<int> primeNumbers = new List<int>();
创建了一个 int 类型的列表。同样,cities
和 bigCities
是 string 类型的列表。然后,您可以使用 Add()
方法或集合初始化器语法在列表中添加元素。
您还可以使用集合初始化器语法添加自定义类的元素。以下代码在 List<Student>
中添加 Student
类的对象。
var students = new List<Student>() {
new Student(){ Id = 1, Name="Bill"},
new Student(){ Id = 2, Name="Steve"},
new Student(){ Id = 3, Name="Ram"},
new Student(){ Id = 4, Name="Abdul"}
};
在 List 中添加数组
使用 AddRange()
方法将数组或另一个集合中的所有元素添加到 List 中。
AddRange() 签名:void AddRange(IEnumerable<T> collection)
string[] cities = new string[3]{ "Mumbai", "London", "New York" };
var popularCities = new List<string>();
// adding an array in a List
popularCities.AddRange(cities);
var favouriteCities = new List<string>();
// adding a List
favouriteCities.AddRange(popularCities);
访问 List
可以通过索引、for/foreach 循环和使用 LINQ 查询来访问列表。列表的索引从零开始。在方括号中传递索引以访问单个列表项,与数组相同。使用 foreach
或 for
循环迭代 List<T>
集合。
List<int> numbers = new List<int>() { 1, 2, 5, 7, 8, 10 };
Console.WriteLine(numbers[0]); // prints 1
Console.WriteLine(numbers[1]); // prints 2
Console.WriteLine(numbers[2]); // prints 5
Console.WriteLine(numbers[3]); // prints 7
// using foreach LINQ method
numbers.ForEach(num => Console.WriteLine(num + ", "));//prints 1, 2, 5, 7, 8, 10,
// using for loop
for(int i = 0; i < numbers.Count; i++)
Console.WriteLine(numbers[i]);
使用 LINQ 访问 List
List<T>
实现了 IEnumerable
接口。因此,我们可以使用 LINQ 查询语法或方法语法查询列表,如下所示。
var students = new List<Student>() {
new Student(){ Id = 1, Name="Bill"},
new Student(){ Id = 2, Name="Steve"},
new Student(){ Id = 3, Name="Ram"},
new Student(){ Id = 4, Name="Abdul"}
};
//get all students whose name is Bill
var result = from s in students
where s.Name == "Bill"
select s;
foreach(var student in result)
Console.WriteLine(student.Id + ", " + student.Name);
在 List 中插入元素
使用 Insert()
方法在 List<T>
集合的指定索引处插入元素。
Insert() 签名:void Insert(int index, T item);
var numbers = new List<int>(){ 10, 20, 30, 40 };
numbers.Insert(1, 11);// inserts 11 at 1st index: after 10.
foreach (var num in numbers)
Console.Write(num);
从 List 中移除元素
使用 Remove()
方法移除 List<T>
集合中指定元素的第一个匹配项。使用 RemoveAt()
方法从指定索引处移除元素。如果指定索引处没有元素,则会抛出 ArgumentOutOfRangeException
。
Remove() 签名:bool Remove(T item)
RemoveAt() 签名:void RemoveAt(int index)
var numbers = new List<int>(){ 10, 20, 30, 40, 10 };
numbers.Remove(10); // removes the first 10 from a list
numbers.RemoveAt(2); //removes the 3rd element (index starts from 0)
//numbers.RemoveAt(10); //throws ArgumentOutOfRangeException
foreach (var el in intList)
Console.Write(el); //prints 20 30
检查 List 中的元素
使用 Contains()
方法确定元素是否在 List<T>
中。
var numbers = new List<int>(){ 10, 20, 30, 40 };
numbers.Contains(10); // returns true
numbers.Contains(11); // returns false
numbers.Contains(20); // returns true
List<T> 类层次结构
下图说明了 List<T>
的层次结构。

List<T> 类属性和方法
下表列出了 List<T>
类的主要属性和方法
属性 | 用法 |
---|---|
Items | 获取或设置指定索引处的元素 |
Count | 返回 List<T> 中存在的元素总数 |
方法 | 用法 |
---|---|
Add | 在 List<T> 的末尾添加一个元素。 |
AddRange | 在 List<T> 的末尾添加指定集合的元素。 |
BinarySearch | 搜索元素并返回元素的索引。 |
Clear | 从 List<T> 中移除所有元素。 |
Contains | 检查指定元素是否存在于 List<T> 中。 |
Find | 根据指定的谓词函数查找第一个元素。 |
Foreach | 迭代 List<T>。 |
Insert | 在 List<T> 中指定索引处插入元素。 |
InsertRange | 在指定索引处插入另一个集合的元素。 |
Remove | 移除指定元素的第一个匹配项。 |
RemoveAt | 移除指定索引处的元素。 |
RemoveRange | 移除所有符合所提供谓词函数的元素。 |
Sort | 对所有元素进行排序。 |
TrimExcess | 将容量设置为实际元素数量。 |
TrueForAll | 确定 List<T> 中的每个元素是否都符合指定谓词定义的条件。 |