跳過到頁腳內容
.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

現在,水果列表中的第二個元素是 "藍莓" 而不是 "香蕉"。

從列表中刪除元素

要從列表中刪除元素,您可以使用 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 循環,這將返回列表中的元素數量:

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

現在,我們來創建一個簡單的函數,將字符串的 List 轉換為 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 文件,其中包含列表轉換後的HTML 到 PDF 的 IronPDF 水果表。 您可以根據需要修改 ExportListToPdf 函數,例如向 HTML 表格添加自定義樣式或向 PDF 添加附加內容。

C# 列表(開發者使用說明)圖 1 - HTML 到 PDF

結論

在本對初學者友好的教程中,我們介紹了使用 C# 列表的基礎知識,並演示了如何集成 IronPDF 將列表數據導出為 PDF 文件。通過將 IronPDF 集成到您的項目中,您可以輕鬆地從 C# 項目生成報告、發票或其他可打印文檔。

IronPDF 提供免費試用版,允許您在購買前測試其功能。

常見問題解答

如何在 C# 中創建清單?

要在 C# 中創建清單,您需要包括 System.Collections.Generic 命名空間。然後,您可以通過在尖括號中指定數據類型來聲明清單。例如:List numbers = new List();

使用哪些方法來添加元素到 C# 清單?

可以使用 Add() 方法添加單個元素,並使用 AddRange() 添加元素集合到 C# 清單。

如何將 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 循環進行簡單迭代,或在需要索引時使用 for 循環遍歷 C# 清單中的元素。

Curtis Chau
技術作家

Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。

除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。