跳過到頁腳內容
.NET幫助

C# Enum(對於開發者的運行原理)

正文內容: 枚舉(Enums),全稱為列舉,作為一個強大的功能,允許開發者建立一組命名常量。 這些常量通過提供有意義的名稱來使代碼更具可讀性和可維護性。 在本文中,我們將通過各種示例和解釋來探索 C# 中枚舉的基礎和高級概念。 我們的目標是提供對枚舉的全面理解以及如何在您的 C# 應用程序中有效使用它們,使用IronPDF 用於 .NET 中的 PDF 生成庫

C# 中的枚舉介紹

枚舉是一種 C# 中的值類型,使變量能夠成為一組預定義常量中的一個,每個常量被稱為一個枚舉成員。 enum 關鍵字用於聲明一個枚舉類型,提供了一種將常量值組合在一起的方式。 枚舉改善了代碼的可讀性並減少了因傳遞錯誤值而引起的錯誤。

// Define an enum with four members
enum Season { Spring, Summer, Autumn, Winter }
// Define an enum with four members
enum Season { Spring, Summer, Autumn, Winter }
' Define an enum with four members
Friend Enum Season
	Spring
	Summer
	Autumn
	Winter
End Enum
$vbLabelText   $csharpLabel

在上述代碼中,Season 是一個包含四個成員的枚舉類型:Spring、Summer、Autumn 和 Winter。 通過定義這個枚舉,我們現在可以創建類型為 Season 的變量,這些變量只能持有這四個值之一。

枚舉的基本類型

理解枚舉成員的整數值

默認情況下,C# 中枚舉的基本類型是 int,稱為基本整數類型,枚舉成員的整數值從 0 開始。每個成員的整數值從前一個成員開始增加 1,除非有明確指定。 您也可以將枚舉的基本類型定義為其他任何整數類型。

// Define an enum with a byte underlying type and specific values
enum Season : byte { Spring = 1, Summer, Autumn = 4, Winter }
// Define an enum with a byte underlying type and specific values
enum Season : byte { Spring = 1, Summer, Autumn = 4, Winter }
' Define an enum with a byte underlying type and specific values
Friend Enum Season As Byte
	Spring = 1
	Summer
	Autumn = 4
	Winter
End Enum
$vbLabelText   $csharpLabel

在此示例中,Season 枚舉的基本類型為 byte。 Spring 明確地被賦值為 1,成為默認值,而 Summer、Autumn 和 Winter 的值是根據順序分配的。

在代碼中使用枚舉

要使用枚舉,您只需聲明一個指定枚舉類型的變量,然後使用點語法將其賦值為枚舉中的一個值,例如在枚舉聲明中定義的不同值之一。

// Declare a Season variable and assign it an enum member value
Season currentSeason = Season.Autumn;
// Declare a Season variable and assign it an enum member value
Season currentSeason = Season.Autumn;
' Declare a Season variable and assign it an enum member value
Dim currentSeason As Season = Season.Autumn
$vbLabelText   $csharpLabel

這行代碼創建了一個名為 currentSeason 的變量,其類型為 Season,並將其賦值為 Autumn。 這明確表示 currentSeason 只能持有一個有效的 Season 值。

在枚舉值與整數之間進行轉換

您可以使用強制轉換將枚舉值轉換為其相應的整數值,反之亦然。 這在您需要以數值形式存儲或傳輸數據時會非常有用。

// Convert Season.Autumn to its integer value and vice versa
int autumnInt = (int)Season.Autumn;     // autumnInt will be 4
Season season = (Season)4;              // season will be Season.Autumn
// Convert Season.Autumn to its integer value and vice versa
int autumnInt = (int)Season.Autumn;     // autumnInt will be 4
Season season = (Season)4;              // season will be Season.Autumn
Imports System

' Convert Season.Autumn to its integer value and vice versa
Dim autumnInt As Integer = CInt(Math.Truncate(Season.Autumn)) ' autumnInt will be 4
Dim season As Season = CType(4, Season) ' season will be Season.Autumn
$vbLabelText   $csharpLabel

這裡,autumnInt 將擁有值 4,對應於 Season 枚舉中的 Autumn。 反過來,當將整數 4 強制轉換回 Season 時,season 將被設定為 Autumn

利用枚舉方法

C# 提供了幾種用於操作枚舉的方法,如 Enum.GetName()Enum.GetNames()Enum.GetValue()Enum.GetValues(),這些方法可用於訪問每個枚舉成員關聯的整數常量。

// Get names of all enum members and print them
string[] names = Enum.GetNames(typeof(Season));
foreach (string name in names)
{
    Console.WriteLine(name);
}
// Get names of all enum members and print them
string[] names = Enum.GetNames(typeof(Season));
foreach (string name in names)
{
    Console.WriteLine(name);
}
' Get names of all enum members and print them
Dim names() As String = System.Enum.GetNames(GetType(Season))
For Each name As String In names
	Console.WriteLine(name)
Next name
$vbLabelText   $csharpLabel

C# 枚舉(開發人員如何使用):圖 1 - 每個與 Season 枚舉關聯的值的控制台輸出

此代碼片段會列出 Season 枚舉的所有成員的名稱。 這些方法在需要遍歷枚舉的所有可能值或在字符串表示與枚舉值之間進行轉換時非常有用。

為枚舉成員分配特定值

您可以為枚舉成員分配特定的整數值來明確控制其數值。

// Define an enum with custom integer values for members
enum ErrorCode : int { None = 0, NotFound = 404, Unauthorized = 401 }
// Define an enum with custom integer values for members
enum ErrorCode : int { None = 0, NotFound = 404, Unauthorized = 401 }
' Define an enum with custom integer values for members
Friend Enum ErrorCode As Integer
	None = 0
	NotFound = 404
	Unauthorized = 401
End Enum
$vbLabelText   $csharpLabel

在此示例中,ErrorCode 是一個枚舉,其每個成員均被分配了自定義的整數值。 這對於預定義的數值碼,如 HTTP 狀態碼等非常實用。

作為位標誌的枚舉

通過使用 [Flags] 屬性,您可以將枚舉定義為一組位標誌。 這允許您在單個枚舉變量中存儲多個值的組合。

[Flags]
// Define an enum for permissions using bit flags
enum Permissions { None = 0, Read = 1, Write = 2, Execute = 4 }
[Flags]
// Define an enum for permissions using bit flags
enum Permissions { None = 0, Read = 1, Write = 2, Execute = 4 }
' Define an enum for permissions using bit flags
<Flags>
Friend Enum Permissions
	None = 0
	Read = 1
	Write = 2
	Execute = 4
End Enum
$vbLabelText   $csharpLabel

通過上述定義的 Permissions 枚舉,您可以使用按位“或”運算符組合不同的權限。

// Combine permissions using bitwise OR
Permissions myPermissions = Permissions.Read | Permissions.Write;
// Combine permissions using bitwise OR
Permissions myPermissions = Permissions.Read | Permissions.Write;
' Combine permissions using bitwise OR
Dim myPermissions As Permissions = Permissions.Read Or Permissions.Write
$vbLabelText   $csharpLabel

這將 myPermissions 設定為 ReadWrite 權限的組合。

枚舉與 switch 語句

枚舉非常適合與 switch 語句配合使用,使您可以根據枚舉的值執行不同的代碼塊。

// Use a switch statement with an enum
Season season = Season.Summer;
switch (season)
{
    case Season.Spring:
        Console.WriteLine("It's spring.");
        break;
    case Season.Summer:
        Console.WriteLine("It's summer.");
        break;
    case Season.Autumn:
        Console.WriteLine("It's autumn.");
        break;
    case Season.Winter:
        Console.WriteLine("It's winter.");
        break;
}
// Use a switch statement with an enum
Season season = Season.Summer;
switch (season)
{
    case Season.Spring:
        Console.WriteLine("It's spring.");
        break;
    case Season.Summer:
        Console.WriteLine("It's summer.");
        break;
    case Season.Autumn:
        Console.WriteLine("It's autumn.");
        break;
    case Season.Winter:
        Console.WriteLine("It's winter.");
        break;
}
' Use a switch statement with an enum
Dim season As Season = Season.Summer
Select Case season
	Case Season.Spring
		Console.WriteLine("It's spring.")
	Case Season.Summer
		Console.WriteLine("It's summer.")
	Case Season.Autumn
		Console.WriteLine("It's autumn.")
	Case Season.Winter
		Console.WriteLine("It's winter.")
End Select
$vbLabelText   $csharpLabel

這段代碼會打印“It’s summer”,因為 season 變量設為 Season.Summer

將字符串解析為枚舉

C# 允許您使用 Enum.Parse() 方法將字符串解析為對應的枚舉值。

// Parse a string into an enum value
string input = "Winter";
Season season = (Season)Enum.Parse(typeof(Season), input);
// Parse a string into an enum value
string input = "Winter";
Season season = (Season)Enum.Parse(typeof(Season), input);
' Parse a string into an enum value
Dim input As String = "Winter"
Dim season As Season = DirectCast(System.Enum.Parse(GetType(Season), input), Season)
$vbLabelText   $csharpLabel

這段代碼將字符串 "Winter" 轉換為對應的枚舉值 Season.Winter

將 IronPDF 與 C# 的枚舉集成

IronPDF PDF Library for Dynamic Document Generation 是一款適用於 .NET 應用程序的 PDF 庫,幫助開發者輕鬆創建、編輯和操作 PDF 文檔。 這個強大的庫在需要動態 PDF 生成的場景中特別有用,如生成報告或發票。 在本節中,我們將探討如何將 IronPDF 與 C# 的枚舉集成,以在 .NET 中從 HTML 創建 PDF 報告,並講解在您的項目中安裝 IronPDF 的過程。

使用 IronPDF,您可以將任何 HTML、URL 或網頁轉換為與源完全相同的 PDF。 這是生成用於發票、報告和其他基於 web 的內容的 PDF 的絕佳選擇。 準備好將HTML 轉換為 PDF了嗎? IronPDF 使其變得輕而易舉。

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
Imports IronPdf

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim renderer = New ChromePdfRenderer()

		' 1. Convert HTML String to PDF
		Dim htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"
		Dim pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent)
		pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf")

		' 2. Convert HTML File to PDF
		Dim htmlFilePath = "path_to_your_html_file.html" ' Specify the path to your HTML file
		Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath)
		pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf")

		' 3. Convert URL to PDF
		Dim url = "http://ironpdf.com" ' Specify the URL
		Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
		pdfFromUrl.SaveAs("URLToPDF.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel

安裝 IronPDF

使用 NuGet 包管理控制台安裝 IronPDF 非常簡單。 在 Visual Studio 中打開包管理控制台,然後輸入以下命令:

Install-Package IronPdf

此命令將在我們的項目中安裝 IronPDF。

另一種方式是利用 Visual Studio 在您的項目中安裝 IronPDF。 在 Visual Studio 中,右鍵單擊解決方案資源管理器,然後單擊 NuGet 包管理器。 隨後,單擊左側的瀏覽選項卡。然後,搜尋 IronPDF,點擊安裝並添加到您的項目中。

C# 枚舉(開發人員如何使用):圖 2 - 使用 NuGet 包管理器搜索 IronPDF 來安裝 IronPDF

將 IronPDF 與枚舉結合使用

讓我們考慮一種情況,即您想要生成一個包含季節性銷售數據報告的 PDF 文檔。 您可以使用枚舉來表示不同的季節,而使用 IronPDF 來生成 PDF 報告。 首先,為季節定義一個枚舉:

public enum Season
{
    Spring,
    Summer,
    Autumn,
    Winter
}
public enum Season
{
    Spring,
    Summer,
    Autumn,
    Winter
}
Public Enum Season
	Spring
	Summer
	Autumn
	Winter
End Enum
$vbLabelText   $csharpLabel

接下來,我們將編寫一個方法,該方法根據所選季節生成 PDF 報告。 此方法將利用 IronPDF 來創建一個簡單的 PDF 文檔,其概述了給定季節的銷售數據。

using IronPdf;
public class SalesReportGenerator
{
    public static void GenerateSeasonalSalesReport(Season season)
    {
        IronPdf.License.LicenseKey = "License-Key";
        var Renderer = new IronPdf.ChromePdfRenderer();
        var htmlTemplate = $"<h1>Sales Report for {season}</h1><p>This section contains sales data for the {season} season.</p>";
        var pdf = Renderer.RenderHtmlAsPdf(htmlTemplate);
        var outputPath = $@"{season}SalesReport.pdf";
        pdf.SaveAs(outputPath);
        Console.WriteLine($"PDF report generated: {outputPath}");
    }
}
using IronPdf;
public class SalesReportGenerator
{
    public static void GenerateSeasonalSalesReport(Season season)
    {
        IronPdf.License.LicenseKey = "License-Key";
        var Renderer = new IronPdf.ChromePdfRenderer();
        var htmlTemplate = $"<h1>Sales Report for {season}</h1><p>This section contains sales data for the {season} season.</p>";
        var pdf = Renderer.RenderHtmlAsPdf(htmlTemplate);
        var outputPath = $@"{season}SalesReport.pdf";
        pdf.SaveAs(outputPath);
        Console.WriteLine($"PDF report generated: {outputPath}");
    }
}
Imports IronPdf
Public Class SalesReportGenerator
	Public Shared Sub GenerateSeasonalSalesReport(ByVal season As Season)
		IronPdf.License.LicenseKey = "License-Key"
		Dim Renderer = New IronPdf.ChromePdfRenderer()
		Dim htmlTemplate = $"<h1>Sales Report for {season}</h1><p>This section contains sales data for the {season} season.</p>"
		Dim pdf = Renderer.RenderHtmlAsPdf(htmlTemplate)
		Dim outputPath = $"{season}SalesReport.pdf"
		pdf.SaveAs(outputPath)
		Console.WriteLine($"PDF report generated: {outputPath}")
	End Sub
End Class
$vbLabelText   $csharpLabel

在此示例中,我們定義了一個方法 GenerateSeasonalSalesReport,該方法接受一個 Season 枚舉作為參數。 它使用 IronPDF 的 ChromePdfRenderer 類來從包含季節名稱和銷售數據佔位文本的 HTML 字符串生成 PDF。 然後將 PDF 保存為包含季節名稱的文件名。

執行

要生成季節性銷售報告,請使用特定季節調用 GenerateSeasonalSalesReport 方法:

static void Main(string[] args)
{
    SalesReportGenerator.GenerateSeasonalSalesReport(Season.Winter);
}
static void Main(string[] args)
{
    SalesReportGenerator.GenerateSeasonalSalesReport(Season.Winter);
}
Shared Sub Main(ByVal args() As String)
	SalesReportGenerator.GenerateSeasonalSalesReport(Season.Winter)
End Sub
$vbLabelText   $csharpLabel

此調用生成了一個名為 WinterSalesReport.pdf 的 PDF 文檔,其中包含冬季的銷售報告。

C# 枚舉(開發人員如何使用):圖 3 - 使用 IronPDF 生成的示例 PDF 輸出

結論

在 C# 中,枚舉提供了一種類型安全的方式來處理一組相關的命名常量。 它們加強了代碼的可讀性,減少了錯誤,並促進了更清晰的代碼組織。 通過將相關的常量值組合在一個有意義的名稱下,枚舉使代碼更易於理解和維護。

將 IronPDF 與 C# 中的枚舉集成允許根據列舉類型動態生成 PDF 文檔。IronPDF 提供免費試用其綜合 PDF 工具,提供適合不同項目需求和規模的多種選擇。

常見問題解答

什麼是 C# 中的枚舉,為什麼它們有用?

枚舉是 C# 中允許開發者定義一組命名常量的功能。這可以提高代碼的可讀性和維護性,因為它將常量值組在一個名稱下。

如何在 C# 中聲明和初始化枚舉?

在 C# 中,使用 enum 關鍵字後面緊跟枚舉名稱及其成員來聲明枚舉。例如,enum Season { Spring, Summer, Autumn, Winter } 創建一個名為 Season 的枚舉,其中包含四個成員。

C# 中的枚舉成員可以有自定義的底層值嗎?

是的,你可以為 C# 中的枚舉成員分配特定的整數值,從而控制它們的數值表示。例如,enum ErrorCode { None = 0, NotFound = 404, Unauthorized = 401 } 為每個成員分配了自定義值。

如何在 C# 中將枚舉值轉換為整數,反之亦然?

要將枚舉值轉換為整數,使用類型轉換,如 (int)Season.Autumn。要將整數轉換為枚舉,將整數強制轉換為枚舉類型,如 (Season)4

C# 枚舉中 [Flags] 屬性的用途是什麼?

C# 中的 [Flags] 屬性允許枚舉作為一組位標誌使用,從而在單個變量中組合值。這對於需要一起表示多個值的場景非常有用,例如結合 'Read' 和 'Write' 權限。

如何在 C# 中利用枚舉生成動態 PDF 文檔?

枚舉可用於動態 PDF 文檔生成中表示不同的類別或類型。例如,可以使用 'Season' 枚舉來創建季節性銷售報告的 PDF,通過選擇合適的枚舉值動態調整內容。

在 C# 項目中安裝 PDF 生成庫的過程是什麼?

要在 C# 項目中安裝 PDF 生成庫,使用 NuGet 包管理器控制台執行類似 Install-Package [LibraryName] 的命令,或使用 Visual Studio 的 NuGet 包管理器界面進行安裝。

如何在 C# 中使用枚舉實現 switch 語句?

在 C# 中,可以將枚舉與 switch 語句一起使用,以根據枚舉的值執行不同的代碼塊。例如,針對 'Season' 枚舉變量的 switch 語句可以為每個季節執行特定的邏輯,從而增強代碼清晰度和組織性。

如何在 C# 中將字串解析為枚舉?

要在 C# 中將字串解析為枚舉值,可以使用 Enum.Parse() 方法。例如,Enum.Parse(typeof(Season), "Winter") 會將字串 'Winter' 轉換為對應的枚舉值 'Season.Winter'。

在 C# 中,可以使用哪些方法來操作枚舉名稱?

C# 提供了諸如 Enum.GetName()Enum.GetNames() 這樣的方法來操作枚舉名稱。Enum.GetName() 返回具有指定值的常量的名稱,Enum.GetNames() 返回枚舉中所有常量的名稱數組。

Curtis Chau
技術作家

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

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