跳至页脚内容
.NET 帮助

C# 列表(开发者如何使用)

列表是多功能且动态的数据结构,用于在 C# 中存储和操作数据集合。 它们是 System.Collections.Generic 命名空间的一部分,该命名空间提供了一系列强大的、类型安全的集合类和强类型对象。 此初学者教程将引导您完成使用 C# 列表的基础知识,包括如何创建/添加元素、访问指定索引或首个出现、修改指定元素和移除元素,以及一些常见用例。

创建列表

要开始使用 List 类,您首先需要在代码中包含 System.Collections.Generic 命名空间:

using System.Collections.Generic;
using System.Collections.Generic;
Imports System.Collections.Generic
$vbLabelText   $csharpLabel

在添加泛型命名空间后,通过指定要存储在尖括号 (< >) 内的所有元素的数据类型来创建一个新的 List 对象。 这是如何创建整数列表的一个示例:

List<int> numbers = new List<int>();
List<int> numbers = new List<int>();
Dim numbers As New List(Of Integer)()
$vbLabelText   $csharpLabel

您还可以使用一些初始值初始化列表,或根据指定集合定义它,如下所示:

List<string> fruits = new List<string> { "apple", "banana", "cherry" };
List<string> fruits = new List<string> { "apple", "banana", "cherry" };
Dim fruits As New List(Of String) From {"apple", "banana", "cherry"}
$vbLabelText   $csharpLabel

我们还可以指定列表的默认初始容量。指定的初始容量是列表的默认最大容量。

列表的方法

向列表添加元素数量

若要向列表添加元素,请使用 Add() 方法:

numbers.Add(1);     // Adds first element
numbers.Add(2);
numbers.Add(3);
numbers.Add(1);     // Adds first element
numbers.Add(2);
numbers.Add(3);
numbers.Add(1) ' Adds first element
numbers.Add(2)
numbers.Add(3)
$vbLabelText   $csharpLabel

您还可以使用 AddRange 方法将指定集合中的一系列元素添加到列表中:

List<int> moreNumbers = new List<int> { 4, 5, 6 };
numbers.AddRange(moreNumbers);
List<int> moreNumbers = new List<int> { 4, 5, 6 };
numbers.AddRange(moreNumbers);
Dim moreNumbers As New List(Of Integer) From {4, 5, 6}
numbers.AddRange(moreNumbers)
$vbLabelText   $csharpLabel

访问列表元素

您可以像访问数组一样使用索引访问列表的各个元素:

string firstFruit = fruits[0];          // "apple"
string secondFruit = fruits[1];         // "banana"
string firstFruit = fruits[0];          // "apple"
string secondFruit = fruits[1];         // "banana"
Dim firstFruit As String = fruits(0) ' "apple"
Dim secondFruit As String = fruits(1) ' "banana"
$vbLabelText   $csharpLabel

请记住,列表是以零为基的索引,因此第一个元素的索引为 0。上面的示例将元素存储在字符串中(如果存在的话)。

修改列表元素

要修改列表中的元素,只需为所需索引处的元素分配一个新值,记住这是零基索引:

fruits[1] = "blueberry";
fruits[1] = "blueberry";
fruits(1) = "blueberry"
$vbLabelText   $csharpLabel

现在,水果列表中的第二个元素是“blueberry”而不是“banana”。

从列表中删除元素

要从列表中删除元素,您可以使用 Remove 方法,该方法删除指定元素的第一个出现:

fruits.Remove("apple");
fruits.Remove("apple");
fruits.Remove("apple")
$vbLabelText   $csharpLabel

或者,您可以使用 RemoveAt 方法删除指定索引处的元素:

fruits.RemoveAt(0);
fruits.RemoveAt(0);
fruits.RemoveAt(0)
$vbLabelText   $csharpLabel

要从列表中删除所有元素,请使用 Clear 方法:

fruits.Clear();
fruits.Clear();
fruits.Clear()
$vbLabelText   $csharpLabel

在列表中查找元素

您可以使用 Contains() 方法检查列表是否包含特定元素:

bool containsApple = fruits.Contains("apple");  // true
bool containsApple = fruits.Contains("apple");  // true
Dim containsApple As Boolean = fruits.Contains("apple") ' true
$vbLabelText   $csharpLabel

要查找元素的首次出现索引,请使用 IndexOf 方法:

int appleIndex = fruits.IndexOf("apple");  // 0
int appleIndex = fruits.IndexOf("apple");  // 0
Dim appleIndex As Integer = fruits.IndexOf("apple") ' 0
$vbLabelText   $csharpLabel

如果未找到元素,IndexOf 返回 -1。

遍历列表

要遍历列表中的元素,可以使用 foreach 循环:

foreach (string fruit in fruits)
{
    Console.WriteLine(fruit);
}
foreach (string fruit in fruits)
{
    Console.WriteLine(fruit);
}
For Each fruit As String In fruits
	Console.WriteLine(fruit)
Next fruit
$vbLabelText   $csharpLabel

或者,您可以使用 Count 属性和 for 循环,Count 返回列表中的元素数量:

for (int i = 0; i < fruits.Count; i++)
{
    Console.WriteLine(fruits[i]);
}
for (int i = 0; i < fruits.Count; i++)
{
    Console.WriteLine(fruits[i]);
}
For i As Integer = 0 To fruits.Count - 1
	Console.WriteLine(fruits(i))
Next i
$vbLabelText   $csharpLabel

对列表进行排序

要按升序排序列表,请使用 Sort 方法:

List<int> unsortedNumbers = new List<int> { 5, 2, 8, 1, 4 };
unsortedNumbers.Sort();

// Now, unsortedNumbers is { 1, 2, 4, 5, 8 }
List<int> unsortedNumbers = new List<int> { 5, 2, 8, 1, 4 };
unsortedNumbers.Sort();

// Now, unsortedNumbers is { 1, 2, 4, 5, 8 }
Dim unsortedNumbers As New List(Of Integer) From {5, 2, 8, 1, 4}
unsortedNumbers.Sort()

' Now, unsortedNumbers is { 1, 2, 4, 5, 8 }
$vbLabelText   $csharpLabel

要按降序排序列表,可以使用带有自定义比较的 Sort 方法:

unsortedNumbers.Sort((a, b) => b.CompareTo(a));

// Now, unsortedNumbers is { 8, 5, 4, 2, 1 }
unsortedNumbers.Sort((a, b) => b.CompareTo(a));

// Now, unsortedNumbers is { 8, 5, 4, 2, 1 }
unsortedNumbers.Sort(Function(a, b) b.CompareTo(a))

' Now, unsortedNumbers is { 8, 5, 4, 2, 1 }
$vbLabelText   $csharpLabel

对于更复杂的排序,您可以实现自定义的 IComparer 类或使用 LINQ(语言集成查询)。 二分搜索算法在排序列表上有效。

使用 LINQ 和列表

LINQ 允许您对集合(包括列表)执行强大的查询和转换。 要使用 LINQ,您首先需要在代码中包含 System.Linq 命名空间:

using System.Linq;
using System.Linq;
Imports System.Linq
$vbLabelText   $csharpLabel

以下是列表上的一些 LINQ 查询示例:

筛选列表

List<int> evenNumbers = numbers.Where(x => x % 2 == 0).ToList();
List<int> evenNumbers = numbers.Where(x => x % 2 == 0).ToList();
Dim evenNumbers As List(Of Integer) = numbers.Where(Function(x) x Mod 2 = 0).ToList()
$vbLabelText   $csharpLabel

映射(转换)列表中的元素

List<string> fruitNamesUpperCase = fruits.Select(x => x.ToUpper()).ToList();
List<string> fruitNamesUpperCase = fruits.Select(x => x.ToUpper()).ToList();
Dim fruitNamesUpperCase As List(Of String) = fruits.Select(Function(x) x.ToUpper()).ToList()
$vbLabelText   $csharpLabel

寻找列表中的最小值和最大值

int minValue = numbers.Min();
int maxValue = numbers.Max();
int minValue = numbers.Min();
int maxValue = numbers.Max();
Dim minValue As Integer = numbers.Min()
Dim maxValue As Integer = numbers.Max()
$vbLabelText   $csharpLabel

将列表转换为数组

要将列表转换为数组,您可以使用 ToArray 方法:

int[] numbersArray = numbers.ToArray();
int[] numbersArray = numbers.ToArray();
Dim numbersArray() As Integer = numbers.ToArray()
$vbLabelText   $csharpLabel

使用 IronPDF 导出列表数据到 PDF

在本节中,我们将演示如何使用 IronPDF 库 将列表中的数据导出为 PDF 文件。 这在您希望生成报告或数据的可打印版本时会非常有用。

首先,将 IronPDF NuGet 包下载并安装到您的项目中:

Install-Package IronPdf

接下来,在代码中包含 IronPdf 命名空间:

using IronPdf;
using IronPdf;
Imports IronPdf
$vbLabelText   $csharpLabel

现在,让我们创建一个简单的函数,将字符串列表转换为 HTML 表格,然后将其导出为 PDF 文件:

using System.Collections.Generic;
using System.Text;
using IronPdf;

void ExportListToPdf(List<string> data, string pdfFilePath)
{
    // Create an HTML table from the list data
    StringBuilder htmlBuilder = new StringBuilder();
    htmlBuilder.Append("<table><tr><th>Item</th></tr>");

    foreach (string item in data)
    {
        htmlBuilder.Append($"<tr><td>{item}</td></tr>");
    }

    htmlBuilder.Append("</table>");

    // Convert the HTML table to a PDF using IronPDF
    var renderer = new ChromePdfRenderer();
    PdfDocument pdf = renderer.RenderHtmlAsPdf(htmlBuilder.ToString());

    // Save the PDF to the specified file path
    pdf.SaveAs(pdfFilePath);
}
using System.Collections.Generic;
using System.Text;
using IronPdf;

void ExportListToPdf(List<string> data, string pdfFilePath)
{
    // Create an HTML table from the list data
    StringBuilder htmlBuilder = new StringBuilder();
    htmlBuilder.Append("<table><tr><th>Item</th></tr>");

    foreach (string item in data)
    {
        htmlBuilder.Append($"<tr><td>{item}</td></tr>");
    }

    htmlBuilder.Append("</table>");

    // Convert the HTML table to a PDF using IronPDF
    var renderer = new ChromePdfRenderer();
    PdfDocument pdf = renderer.RenderHtmlAsPdf(htmlBuilder.ToString());

    // Save the PDF to the specified file path
    pdf.SaveAs(pdfFilePath);
}
Imports System.Collections.Generic
Imports System.Text
Imports IronPdf

Private Sub ExportListToPdf(ByVal data As List(Of String), ByVal pdfFilePath As String)
	' Create an HTML table from the list data
	Dim htmlBuilder As New StringBuilder()
	htmlBuilder.Append("<table><tr><th>Item</th></tr>")

	For Each item As String In data
		htmlBuilder.Append($"<tr><td>{item}</td></tr>")
	Next item

	htmlBuilder.Append("</table>")

	' Convert the HTML table to a PDF using IronPDF
	Dim renderer = New ChromePdfRenderer()
	Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(htmlBuilder.ToString())

	' Save the PDF to the specified file path
	pdf.SaveAs(pdfFilePath)
End Sub
$vbLabelText   $csharpLabel

要使用此函数,只需将其与您的列表和所需的 PDF 文件路径一起调用:

List<string> fruits = new List<string> { "apple", "banana", "cherry" };
ExportListToPdf(fruits, "Fruits.pdf");
List<string> fruits = new List<string> { "apple", "banana", "cherry" };
ExportListToPdf(fruits, "Fruits.pdf");
Dim fruits As New List(Of String) From {"apple", "banana", "cherry"}
ExportListToPdf(fruits, "Fruits.pdf")
$vbLabelText   $csharpLabel

这将生成名为“Fruits.pdf”的 PDF 文件,其中包含通过 使用 IronPDF 转换 HTML 到 PDF 的水果列表表格。 您可以修改 ExportListToPdf 函数以满足您的需要,例如为 HTML 表格添加自定义样式或向 PDF 添加其他内容。

!C# 列表(开发人员如何使用)图 1 - HTML 到 PDF

结论

在这个对初学者友好的教程中,我们介绍了使用 C# 列表的基础知识,并演示了如何集成 IronPDF 来将列表数据导出为 PDF 文件。通过将 IronPDF 集成到您的项目中,您可以轻松地从 C# 项目生成报告、发票或其他可打印文档。

IronPDF 提供免费试用,让您在购买前测试其功能。

常见问题解答

如何在C#中创建一个列表?

要在C#中创建一个列表,你需要包含System.Collections.Generic命名空间。然后你可以通过在尖括号内指定数据类型来声明一个列表。例如:List numbers = new List();

哪些方法用于向C#列表中添加元素?

使用Add()方法可以向C#列表中添加单个元素,使用AddRange()可以添加元素集合。

如何将C#列表导出为PDF文件?

要将C#列表导出为PDF文件,你可以使用IronPDF库。将你的列表数据转换为HTML表格格式,然后使用IronPDF将其渲染为PDF。

排序C#列表的最佳方式是什么?

你可以使用Sort()方法按升序排序C#列表。要按降序排序,可以使用带有自定义比较委托的Sort()方法。

如何访问C#列表中的元素?

C#列表中的元素可以使用索引访问,类似于数组。列表是从零开始索引的,因此你可以使用元素在列表中的位置来检索它。

可用的从C#列表中删除元素的选项有哪些?

你可以使用Remove()方法删除特定元素,RemoveAt()方法删除特定索引的元素,或使用Clear()方法删除所有元素。

如何在C#列表中使用LINQ?

LINQ可以用于C#列表,以执行强大的查询和转换,例如高效过滤、映射和查找最小或最大值。

如何将列表转换为C#中的数组?

你可以使用ToArray()方法将C#列表转换为数组,它会创建一个包含列表元素的新数组。

C#列表的一些常见用例是什么?

C#列表通常用于管理动态数据集合,使用LINQ执行复杂查询,以及使用诸如IronPDF之类的库生成报告或文档。

如何遍历C#列表中的元素?

你可以使用foreach循环简单迭代C#列表中的元素,或者在需要索引时使用for循环。

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。