Tutorialsteacher

关注我们

文章
  • C#
  • C# 面向对象编程
  • ASP.NET Core
  • ASP.NET MVC
  • LINQ
  • 控制反转 (IoC)
  • Web API
  • JavaScript
  • TypeScript
  • jQuery
  • Angular 11
  • Node.js
  • D3.js
  • Sass
  • Python
  • Go lang
  • HTTPS (SSL)
  • 正则表达式
  • SQL
  • SQL Server
  • PostgreSQL
  • MongoDB
  • C# - 入门
  • C# - 版本历史
  • C# - 第一个程序
  • C# - 关键词
  • C# - 类和对象
  • C# - 命名空间
  • C# - 变量
  • C# - 隐式类型变量
  • C# - 数据类型
  • 数字
  • 字符串
  • DateTime
  • 结构体
  • 枚举
  • StringBuilder
  • 匿名类型
  • 动态类型
  • 可空类型
  • C# - 值类型和引用类型
  • C# - 接口
  • C# - 运算符
  • C# - if else 语句
  • C# - 三元运算符 ?
  • C# - Switch 语句
  • C# - For 循环
  • C# - While 循环
  • C# - Do-while 循环
  • C# - 分部类
  • C# - Static 关键字
  • C# - 数组
  • 多维数组
  • 交错数组
  • C# - 索引器
  • C# - 泛型
  • 泛型约束
  • C# - 集合
  • ArrayList
  • List
  • SortedList
  • Dictionary
  • Hashtable
  • Stack
  • Queue
  • C# - Tuple
  • C# - ValueTuple
  • C# - 内置异常
  • 异常处理
  • throw 关键字
  • 自定义异常
  • C# - 委托
  • Func 委托
  • Action 委托
  • Predicate 委托
  • 匿名方法
  • C# - 事件
  • C# - 协变
  • C# - 扩展方法
  • C# - 流 I/O
  • C# - File 类
  • C# - FileInfo 类
  • C# - 对象初始化器
  • OOP - 概述
  • 面向对象编程
  • 抽象
  • 封装
  • 关联与组合
  • 继承
  • 多态
  • 方法重写
  • 方法隐藏
  • C# - SOLID 原则
  • 单一职责原则
  • 开闭原则
  • 里氏替换原则
  • 接口隔离原则
  • 依赖倒置原则
  • 设计模式
  • 单例模式
  • 抽象工厂模式
  • 工厂方法模式
Entity Framework Extensions - 提升 EF Core 9
  批量插入
  批量删除
  批量更新
  批量合并

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 中添加元素
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 类的对象。

示例:在 List 中添加自定义类对象
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)

示例:在 List 中添加数组
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
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 查询语法或方法语法查询列表,如下所示。

示例:对 List 进行 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);

示例:在 List 中插入元素
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)

示例:从 List 中移除元素
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> 中。

示例:Contains()
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> 的层次结构。

C# List Class Hierarchy

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> 中的每个元素是否都符合指定谓词定义的条件。
TUTORIALSTEACHER.COM

TutorialsTeacher.com 是您权威的技术教程来源,旨在通过循序渐进的方法,指导您掌握各种网络和其他技术。

我们的内容旨在帮助所有水平的学习者轻松快速地学习技术。通过访问此平台,您承认您已审阅并同意遵守我们的使用条款和隐私政策,这些条款和政策旨在保护您的体验和隐私权。

[email protected]

关于我们使用条款隐私政策
copywrite-symbol

2024 TutorialsTeacher.com. (v 1.2) 版权所有。