IRONSOFTWAREHOME
開發者更新

C# Yield Return(開發者的工作原理)

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

C# 是由 Microsoft 開發的最受歡迎的程式語言之一,它提供的功能能讓您的程式碼更加優雅和高效。 其中一項功能是 yield 關鍵字,它首次在 C# 2.0 中引入。Microsoft 提供了有關 yield 關鍵字語句的完整語言參考,以探索如何在迭代器方法中使用它們,您可以在 Microsoft 官方 yield 文件中查看。

在本文中,我們將深入探討 C# 中的 yield return,探索其功能、用例以及如何改變您處理迭代的方法。

Understanding the Basics: Iteration in C#

迭代是程式設計中的一個基本概念,而 C# 提供了多種機制來實現它。 傳統上,像 for 和 foreach 這樣的迴圈一直是用於遍歷集合的主要工具。 然而,C# 引入了一個更優雅的解決方案,將 yield 關鍵字應用於 return 語句,以及通過使用 IEnumerable 介面。

yield return 語句的效率

從本質上講,yield return 是用於迭代器方法中的一種語句,以更高效的方式生成值的序列。 它允許您建立迭代器而不需要在記憶體中生成整個集合,這在處理大型資料集或無限序列時特別有用。

這是一個簡單的程式碼片段,以說明 yield return 的基本用法:

using System;
using System.Collections.Generic;

public class Example
{
    // Method that generates numbers from start to end using 'yield return'
    public IEnumerable<int> GenerateNumbers(int start, int end)
    {
        // Loop from 'start' to 'end'
        for (int i = start; i <= end; i++)
        {
            yield return i; // Returns each number in the sequence without breaking the loop
        }
    }

    public static void Main()
    {
        // Usage: Using 'foreach' to iterate over numbers generated by 'GenerateNumbers'
        foreach (var number in new Example().GenerateNumbers(1, 5))
        {
            Console.WriteLine(number); // Outputs numbers 1 - 5
        }
    }
}

在這個例子中,GenerateNumbers 方法使用 yield return 生成從 start 到 end 的數字序列。 迭代器是懶惰評估的,這意味著每個數字都是在迭代執行過程中按需生成的。

懶惰評估和效率

yield return 語句的一個顯著優勢是其支持懶惰評估的能力。 不同於傳統方法,傳統方法在迭代之前生成整個集合,而 yield return 則一次產生一個值。這可以帶來顯著的記憶體節省,尤其是在處理大型資料集時。

有狀態迭代:處理複雜場景

yield return 語句不僅限於生成簡單序列; 它在迭代器區塊中處理更複雜的場景方面表現出色。 通過在每次迭代之間保持狀態機,您可以建立能夠記住其在序列中位置的迭代器。

using System;
using System.Collections.Generic;

public class FibonacciExample
{
    // Method that generates Fibonacci numbers up to the specified count
    public IEnumerable<string> GenerateFibonacci(int count)
    {
        int a = 0, b = 1;
        for (int i = 0; i < count; i++)
        {
            yield return a.ToString(); // Returns the Fibonacci number as a string
            int temp = a;
            a = b;
            b = temp + b;
        }
    }

    public static void Main()
    {
        // Usage: Iterating over Fibonacci numbers generated by 'GenerateFibonacci'
        foreach (var fibNumber in new FibonacciExample().GenerateFibonacci(8))
        {
            Console.WriteLine(fibNumber); // Outputs a Fibonacci number sequence
        }
    }
}

在這個例子中,GenerateFibonacci 方法使用 yield return 來建立一個費波納西數序列。 在每次迭代之間維持狀態,保證費波納西數的高效生成和輸出。

建立無限序列

yield return 的一個有趣應用是其建立無限值序列的能力。 由於值是即時生成的,您可以表示無限延續的序列而不需消耗無限的記憶體。

using System;
using System.Collections.Generic;

public class InfiniteSequenceExample
{
    // Method that generates an infinite sequence of even numbers
    public IEnumerable<int> GenerateEvenNumbers()
    {
        int num = 0;
        while (true)
        {
            yield return num;
            num += 2;
        }
    }

    public static void Main()
    {
        // Usage: Generating even numbers using the 'GenerateEvenNumbers' method
        var evenNumberIterator = new InfiniteSequenceExample().GenerateEvenNumbers().GetEnumerator();
        for (int i = 0; i < 5; i++)
        {
            evenNumberIterator.MoveNext();
            Console.WriteLine(evenNumberIterator.Current); // Outputs the first 5 even numbers
        }
    }
}

在這個例子中,GenerateEvenNumbers 方法為偶數建立了一個迭代器,您可以根據需要進行迭代。 您還可以使用 yield break 語句結合 yield return 停止並退出迴圈,為迴圈建立自定義迭代。

介紹 IronPDF:C# 的強大程式庫

C# Yield Return(其對開發者的運作方式):圖 1 - IronPDF 網頁

IronPDF 是一個多功能的 C# 程式庫,專為簡化處理 PDF 的複雜性而設計。 無論您是在生成發票、報告或其他任何文件,IronPDF 都能讓您在 C# 應用程式中將 HTML 內容流暢地轉換為精緻和專業的 PDF。

快速開始安裝 IronPDF

要將 IronPDF 融入您的 C# 專案中,您可以快速安裝 IronPDF NuGet 套件。 在您的套件管理器控制台中執行以下命令:

PM > Install-Package IronPdf

或者,您可以在 NuGet 套件管理器中找到 "IronPDF" 並從那裡安裝。

使用 IronPDF 生成 PDF

using IronPDF 生成 PDF 是一個簡單明瞭的過程。 讓我們來看一個基本的例子:

using IronPdf;

public class PdfGenerationExample
{
    public static void Main()
    {
        var htmlContent = "<html><body><h1>Hello, IronPDF!</h1></body></html>";
        
        // Create a new PDF renderer instance
        var pdfRenderer = new ChromePdfRenderer();
        
        // Render the HTML content as a PDF and save it to a file
        pdfRenderer.RenderHtmlAsPdf(htmlContent).SaveAs("C:/GeneratedDocument.pdf");
    }
}

在上述例子中,IronPDF 用於將 HTML 內容渲染為 PDF 文件,然後將其保存到指定位置。 有關更詳細的資訊,請存取 IronPDF 文件。

yield return 和 IronPDF 的交匯點

現在,讓我們探討 yield return 語句這一強大的工具,對懶惰評估和高效迭代的支持,是否能無縫整合到 IronPDF 中。

考慮一下需要生成一個包含項目列表的 PDF 文件的情況,使用 yield return。 您可以利用 yield 語句的優勢,動態生成內容,然後利用 IronPDF 將該內容轉換為 PDF。 下面的程式碼片段生成了一個 PDF 文件,藉助 yield 語句為 PDF 內容增添了動態控制:

using System;
using System.Collections.Generic;
using System.Linq;
using IronPdf;

class Program
{
    // Method that dynamically generates content using 'yield return'
    public static IEnumerable<string> GenerateDynamicContent()
    {
        yield return "Item 1";
        yield return "Item 2";
        yield return "Item 3";
    }

    public static void Main(string[] args)
    {
        // Generate dynamic content using the 'GenerateDynamicContent' function
        var dynamicContent = GenerateDynamicContent();

        // Create HTML structure for the PDF document with dynamic content
        var dynamicPdfContent = $@"
            <html>
            <body>
                <h1>List of Items</h1>
                <ul>
                    {string.Join("", dynamicContent.Select(item => $"<li>{item}</li>"))}
                </ul>
            </body>
            </html>
        ";

        // Create a new PDF document with dynamically generated content
        var dynamicPdfRenderer = new ChromePdfRenderer();
        dynamicPdfRenderer.RenderHtmlAsPdf(dynamicPdfContent).SaveAs("C:/DynamicItems.pdf");
    }
}

在此範例中,GenerateDynamicContent 方法利用 yield return 提供一個動態項目序列。 然後將生成的內容整合到 HTML 結構中,並由 IronPDF 用於建立 PDF 文件。

C# Yield Return(其對開發者的運作方式):圖 2 - 從前面的程式碼導出的 PDF

結論

總之,yield return 是 C# 中一個強大而優雅的功能,改變了您處理迭代的方式。 其支持懶惰評估、處理狀態化迭代的復雜場景、建立無限序列的能力,令其成為您程式設計工具箱中的一個寶貴工具。 不論您是在處理大型資料集還是實現複雜的演算法,yield return 使您能夠編寫更高效且表達力強的程式碼。

雖然 yield return 促進了內容的高效和按需生成,IronPDF 則進一步將該內容無縫轉換為專業的 PDF 文件。 無論您是動態建立列表、報告或其他任何文件,這種協同作用使您能夠將您的 C# 文件生成能力提升到新的高度。 擁抱這個動態二重奏的潛力,讓您的 PDF 內容閃耀著動態和高效生成的光芒!

IronPDF 提供免費試用免費試用,以測試其完整功能,就像在商業模式中一樣。 了解更多有關 IronPDF 授權,價格從 $999 開始。

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% 解鎖。無需信用卡。

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

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

Iron Software的客戶標誌
獲取您的無義務諮詢
填寫以下表格或電子郵件sales@ironsoftware.com
您的詳細資訊將始終保密。
受到全球數百萬工程師的信任
Iron Software的客戶標誌
立即獲取您的30天試用金鑰。
無需信用卡或帳戶建立
C# 用於PDF的NuGet程式庫
使用NuGet安裝

版本: 2026.9

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

版本: 2026.9

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

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

授權從$999起