IRONSOFTWAREHOME
開發者更新

C#差異聯合(它如何對開發者起作用)

Jacob Mellor,首席技術官 @ Team Iron
Jacob Mellor
Updated: 2026年4月23日

作為一名使用IronPDF進行動態PDF生成的.NET開發者,您通常需要表示和管理一系列特定型別的資料——如不同型別的文件資料、日誌記錄資訊、使用者角色或導出選項。 這就是C#判別聯合概念派上用場的地方。

雖然C#不像F#或Rust那樣原生支援判別聯合,但您仍然可以有效模擬判別聯合。 在這篇部落格文章中,我們將深入探討如何在C#中定義和使用判別聯合型別,展示如何將其應用於IronPDF以進行實際的PDF處理,並探索當與模式匹配配對時,這種模式能提供的優勢。

What Are Discriminated Unions in C#?

判別聯合,也被稱為標記聯合或聯合型別,允許變數持有一個來自有限選項集的值,每個選項都與一個獨特的案例識別符相關聯。

在其他語言如F#中,您可以使用union關鍵字來定義它們。 C#沒有原生提供這個功能,但開發者可以通過巧妙結合記錄型別、類和switch表達式來模擬它們。

例如:

public abstract record PdfAction;
public record GenerateReport(string ReportName) : PdfAction;
public record LogError(string Message) : PdfAction;
public record ExportToExcel(string FilePath) : PdfAction;

上述的每個記錄都代表該聯合的唯一個案。 基礎PdfAction型別是判別體。

為什麼判別聯合在IronPDF工作流程中很重要

想像一下您正在使用IronPDF構建PDF報告生成器,您需要根據使用者的輸入執行不同的操作——可能是生成PDF、記錄錯誤或導出資料。

在C#中使用判別聯合可以讓您清楚地表示這些選項型別,從而達到編譯時安全、減少錯誤和更清晰的邏輯。

這是您可能在IronPDF中使用的方法:

void HandlePdfAction(PdfAction action)
{
    switch (action)
    {
        case GenerateReport r:
            var pdf = new IronPdf.HtmlToPdf().RenderHtmlAsPdf("<h1>" + r.ReportName + "</h1>");
            pdf.SaveAs(r.ReportName + ".pdf");
            break;
        case LogError e:
            Console.WriteLine("Logging Error: " + e.Message);
            break;
        case ExportToExcel x:
            Console.WriteLine("Exporting to Excel at " + x.FilePath);
            break;
        default:
            throw new NotSupportedException("Unknown action");
    }
}

這種方法保持您的程式碼組織良好且強大,並且使開發者更容易在單一位置理解所有可能的選項。

Simulating Discriminated Unions in C# – Struct vs. Record vs. Class

雖然C#缺乏union關鍵字,但您可以使用以下方法來模擬判別聯合:

  • 記錄:理想用於不可變資料,並支持清晰的模式匹配。
  • 類:在繼承和引用語義上更靈活。
  • 結構:對於值型別有用,但在處理引用型別或繼承時靈活性較低。

C#判別聯合(對開發者的作用):圖1 - 結構vs. 記錄vs. 類

如果性能和記憶體佈局很重要——例如在高吞吐量的PDF日誌記錄中,您可能會考慮謹慎使用結構型判別聯合:

public interface IAction { }
public readonly struct SaveAction : IAction
{
    public string FileName { get; }
    public SaveAction(string fileName) => FileName = fileName;
}

注意:使用結構時,尤其是在依賴switch表達式時,您將失去一些模式匹配的好處。

Benefits of Using Discriminated Unions in C#

採用這種軟體工程模式有幾個關鍵優勢:

  • 編譯時安全:您將在運行時之前發現switch表達式中缺失的案例。
  • 更清晰的邏輯:用命名的案例來編寫、評論和推理行為更容易。
  • 關注點分離:您基於資料而不是型別層次結構來分離行為。
  • 重構的方便性:新增或刪除案例變得更為簡單。

當與IronPDF配合使用時,這使得管理使用者輸入、渲染邏輯或建立具有不同值管線的動態範本更容易。

何時與IronPDF一起使用判別聯合

以下是該模式表現優秀的一些實際情境:

  • PDF生成工作流程:文件生命周期中的不同步驟(生成、儲存、郵件)。
  • 權限模型:代表不同的使用者存取級別。
  • 日誌系統:使用判別聯合型別對日誌級別(資訊、錯誤、除錯)。
  • 單元測試:將測試行動定義為聯合型別以保持邏輯樹的可維護性。
  • 導出選項:代表輸出目標,例如PDF、Excel、Word 作為聯合實例。

C#判別聯合(對開發者的作用):圖2 - .NET應用中的判別聯合常見情境

範例 - 處理來自UI事件的PDF動作

假如您正在捕捉UI事件並希望使用判別聯合將它們路由到IronPDF任務:

public abstract record UserAction;
public record GeneratePdf(string HtmlContent, string FileName) : UserAction;
public record ShowMessage(string Text) : UserAction;
public record ExitApplication() : UserAction;
void OnUserEvent(UserAction action)
{
    switch (action)
    {
        case GeneratePdf pdf:
            var renderer = new IronPdf.HtmlToPdf();
            var document = renderer.RenderHtmlAsPdf(pdf.HtmlContent);
            document.SaveAs(pdf.FileName);
            break;
        case ShowMessage msg:
            MessageBox.Show(msg.Text);
            break;
        case ExitApplication:
            Application.Exit();
            break;
    }
}

這讓您可以用清晰的邏輯來表示事件,並減少對公用物件型別或過於動態的處理的依賴。

Future Outlook – Will C# Ever Support Native Discriminated Unions?

已經有提案要在C#中增加對判別聯合的原生支援,尤其是在對更表達型型別系統的需求增長的情況下。 雖然該語言尚未引入真正的union關鍵字,但C#仍在不斷演變——引入類似於記錄型別、模式匹配和switch表達式等特性,這些特性與完整的判別聯合功能越來越接近。

對現代、支援功能型語言特性的.NET開發者來說,這一領域值得密切關注。

總結

即使沒有原生支援,在C#中使用判別聯合也可以顯著改善您在IronPDF應用中如何結構和表示邏輯。 通過利用記錄型別、switch表達式和基礎型別,您將使您的程式碼庫更易讀、更易維護、抗錯誤——同時也開啟了一個以更聲明式和表達性方式處理PDF相關任務的門路。

如果您是一位構建現代、靈活.NET應用的軟體工程師,這種模式是您工具包中必備的一員。

立即免費試用IronPDF

準備好將您的C# PDF生成提升到下一個層次了嗎? 下載IronPDF並開始免費試用。 無論您是從HTML生成文件、記錄導出,還是使用判別聯合自動化報告——IronPDF為您的應用程式提供了應有的性能和效能。

Jacob Mellor,首席技術官 @ Team Iron
首席技術官

Jacob Mellor是Iron Software的首席技術官,一位在C# PDF技術上開創先河的遠見工程師。作為Iron Software核心程式碼庫的原開發者,他從創立以來就一直在塑造公司的產品架構,與首席執行官Cameron Rimington一起將公司轉變為服務於NASA、特斯拉和全球政府公司的50多名人員的公司。

...
閱讀更多

相關文章

Key in blue circle

立即免費取得 30 天試用金鑰。

Your trial license will be sent to your email address

無任何限制。100% 解鎖。無需信用卡。

bullet_checked無需信用卡或建立帳號無任何限制。100% 解鎖。無需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
預訂您的免費現場演示
Booking Badge

受到全球數百萬工程師的信任

Iron Software的客戶標誌
獲取您的無義務諮詢
您的詳細資訊將始終保密。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
受到全球數百萬工程師的信任
立即獲取您的30天試用金鑰。
無需信用卡或帳戶建立
C# 用於PDF的NuGet程式庫
使用NuGet安裝

版本: 2026.10

PM > Install-Package IronPdf
nuget.org/packages/IronPdf/
  1. 在解決方案資源管理器,右鍵點選參考,管理NuGet包
  2. 選擇瀏覽並搜尋"IronPdf"
  3. 選擇套件並安裝
C# PDF DLL
下載DLL

版本: 2026.10

或者點擊此處下載Windows安裝程式。

  1. 下載並解壓IronPDF到類似~/Libs的位置,位於您的解決方案目錄中
  2. 在Visual Studio解決方案資源管理器,右鍵點選參考。選擇瀏覽,"IronPdf.dll"

授權從$999起