.NET幫助 C# Yield Return(開發者的工作原理) Curtis Chau 更新日期:6月 22, 2025 Download IronPDF NuGet 下載 DLL 下載 Windows 安裝程式 Start Free Trial Copy for LLMs Copy for LLMs Copy page as Markdown for LLMs Open in ChatGPT Ask ChatGPT about this page Open in Gemini Ask Gemini about this page Open in Grok Ask Grok about this page Open in Perplexity Ask Perplexity about this page Share Share on Facebook Share on X (Twitter) Share on LinkedIn Copy URL Email article C# 是由 Microsoft 開發的最受歡迎的程式設計語言之一,它提供了為您的程式碼添加優雅和效率的功能。 其中一個功能是 yield 關鍵字,它首次在 C# 2.0 中引入。Microsoft 提供了關於 yield 關鍵字語句的完整語言參考,以探索在迭代器方法中使用它們的更多資訊,您可以在官方 Microsoft yield 文件中查看。 在本文中,我們將研究 C# 中的 yield return,探索其功能、用例以及如何改變您對迭代的處理方式。 瞭解基礎: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 } } } 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 } } } Imports System Imports System.Collections.Generic Public Class Example ' Method that generates numbers from start to end using 'yield return' Public Iterator Function GenerateNumbers(ByVal start As Integer, ByVal [end] As Integer) As IEnumerable(Of Integer) ' Loop from 'start' to 'end' For i As Integer = start To [end] Yield i ' Returns each number in the sequence without breaking the loop Next i End Function Public Shared Sub Main() ' Usage: Using 'foreach' to iterate over numbers generated by 'GenerateNumbers' For Each number In (New Example()).GenerateNumbers(1, 5) Console.WriteLine(number) ' Outputs numbers 1 - 5 Next number End Sub End Class $vbLabelText $csharpLabel 在此範例中,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 } } } 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 } } } Imports System Imports System.Collections.Generic Public Class FibonacciExample ' Method that generates Fibonacci numbers up to the specified count Public Iterator Function GenerateFibonacci(ByVal count As Integer) As IEnumerable(Of String) Dim a As Integer = 0, b As Integer = 1 For i As Integer = 0 To count - 1 Yield a.ToString() ' Returns the Fibonacci number as a string Dim temp As Integer = a a = b b = temp + b Next i End Function Public Shared Sub Main() ' Usage: Iterating over Fibonacci numbers generated by 'GenerateFibonacci' For Each fibNumber In (New FibonacciExample()).GenerateFibonacci(8) Console.WriteLine(fibNumber) ' Outputs a Fibonacci number sequence Next fibNumber End Sub End Class $vbLabelText $csharpLabel 在此範例中,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 } } } 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 } } } Imports System Imports System.Collections.Generic Public Class InfiniteSequenceExample ' Method that generates an infinite sequence of even numbers Public Iterator Function GenerateEvenNumbers() As IEnumerable(Of Integer) Dim num As Integer = 0 Do Yield num num += 2 Loop End Function Public Shared Sub Main() ' Usage: Generating even numbers using the 'GenerateEvenNumbers' method Dim evenNumberIterator = (New InfiniteSequenceExample()).GenerateEvenNumbers().GetEnumerator() For i As Integer = 0 To 4 evenNumberIterator.MoveNext() Console.WriteLine(evenNumberIterator.Current) ' Outputs the first 5 even numbers Next i End Sub End Class $vbLabelText $csharpLabel 在此範例中,GenerateEvenNumbers 方法創建了一個偶數的迭代器,您可以根據需要對其進行迭代。 您還可以使用 yield break 語句與 yield return 來停止並退出迴圈,為迴圈進行自定義迭代。 介紹 IronPDF:一個強大的 C# 庫 IronPDF 脫穎而出,作為一個旨在簡化 PDF 工作複雜性的多功能 C# 庫。 IronPDF的主要功能是其HTML到PDF轉換工具,確保版面和樣式得以保留。 安裝IronPDF:快速入門 要將 IronPDF 合併到您的 C# 專案中,您可以迅速安裝 IronPDF NuGet 套件。 或者,在NuGet包管理器中找到"IronPDF",然後從那裡進行安裝。 Install-Package IronPdf 或者您可以在 NuGet 套件管理器中找到 "IronPDF" 並從那裡安裝它。 使用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"); } } 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"); } } Imports IronPdf Public Class PdfGenerationExample Public Shared Sub Main() Dim htmlContent = "<html><body><h1>Hello, IronPDF!</h1></body></html>" ' Create a new PDF renderer instance Dim pdfRenderer = New ChromePdfRenderer() ' Render the HTML content as a PDF and save it to a file pdfRenderer.RenderHtmlAsPdf(htmlContent).SaveAs("C:/GeneratedDocument.pdf") End Sub End Class $vbLabelText $csharpLabel 在上述範例中,IronPDF 用於將 HTML 內容渲染為 PDF 文檔,然後存儲在指定的位置。 有關更詳細的資訊,請訪問 IronPDF 文檔。 yield return 和 IronPDF 的交集 現在,讓我們探討 yield return 語句,一個用於延遲評估和高效迭代的強大工具,是否能夠與 IronPDF 無縫結合。 考慮一下需要使用 yield return 生成包含項目清單的 PDF 文件的場景。 您可以利用 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"); } } 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"); } } Imports System Imports System.Collections.Generic Imports System.Linq Imports IronPdf Friend Class Program ' Method that dynamically generates content using 'yield return' Public Shared Iterator Function GenerateDynamicContent() As IEnumerable(Of String) Yield "Item 1" Yield "Item 2" Yield "Item 3" End Function Public Shared Sub Main(ByVal args() As String) ' Generate dynamic content using the 'GenerateDynamicContent' function Dim dynamicContent = GenerateDynamicContent() ' Create HTML structure for the PDF document with dynamic content , String.Join(TangibleTempVerbatstring.Format(mDoubleQuote, dynamicContent.Select(Function(item) $TangibleTempVerbatimCloseTag"<li>{item}</li>")), TangibleStringInterpolationMarker) var dynamicPdfContent = $"TangibleTempVerbatimOpenTagTangibleTempVerbatimStringLiteralLineJoin <html>TangibleTempVerbatimStringLiteralLineJoin <body>TangibleTempVerbatimStringLiteralLineJoin <h1>List of Items</h1>TangibleTempVerbatimStringLiteralLineJoin <ul>TangibleTempVerbatimStringLiteralLineJoin {0}ignoreignoreignoreignoreignore</ul></body></html>" ' Create a new PDF document with dynamically generated content Dim dynamicPdfRenderer = New ChromePdfRenderer() dynamicPdfRenderer.RenderHtmlAsPdf(dynamicPdfContent).SaveAs("C:/DynamicItems.pdf") End Sub End Class $vbLabelText $csharpLabel 在此範例中,GenerateDynamicContent 方法使用 yield return 提供動態項目的序列。 生成的內容隨後被合併到 HTML 結構中,並由 IronPDF 用於創建 PDF 文件。 結論 總之,yield return 是 C# 中一個強大而優雅的功能,轉變了您處理迭代的方式。 它能夠支持延遲評估、使用有狀態迭代處理複雜場景,以及創建無限序列,使其成為您程式設計工具箱中的一個寶貴工具。 無論您是在處理大型資料集還是實施複雜算法,yield return 都能使您編寫更高效、更具表達力的程式碼。 雖然 yield return 促進了內容的高效和按需生成,IronPDF 緊接著將這些內容無縫地轉換為專業的 PDF 文檔。 無論您是動態創建清單、報告還是任何其他文檔,這種協同作用都能夠讓您將 C# 文檔生成功能提升到新的高度。 擁抱這對動態組合的潛力,讓您的 PDF 用動態和高效生成的內容大放異彩! IronPDF 提供免費試用來測試其完整功能,就像商業模式一樣。 瞭解有關 IronPDF 授權的更多資訊,起價為 $799。 常見問題解答 如何使用 yield return 語句來增強 C# 中的迭代? 在 C# 中,可以利用 yield return 語句高效生成序列。它允許創建按需生產值的迭代器,這有助於節省記憶體,因為不需要儲存整個集合。 在處理大型數據集時,yield return 提供了哪些優勢? yield return 提供了延遲評估的優勢,這意味著僅在需要時生成值。在處理大型數據集時,這顯著降低了記憶體使用量,因為不需要將完整序列存儲在記憶體中。 yield return 可以與 C# 中的 PDF 生成結合使用嗎? 是的,yield return 可以用來動態生成內容,然後使用 IronPDF 將其轉換為 PDF 格式。這種方法促進了在 C# 應用程式內的高效和動態文檔生成。 yield return 如何簡化 C# 中無限序列的創建? yield return 通過即時生成值簡化了無限序列的創建。這意味着它可以無限期地生成值而不會耗盡記憶體,因為它僅在需要時創建每個元素。 在 C# 編程環境中,延遲評估有什麼好處? 在 C# 中,延遲評估藉由 yield return 使得值僅在迭代過程中需要時才計算。這導致更高效的記憶體使用,並在處理大量或複雜的數據序列時可以提高性能。 如何使用 C# 庫將 HTML 內容轉換為 PDF? 您可以使用 IronPDF 庫在 C# 中將 HTML 內容轉換為 PDF。庫中的 ChromePdfRenderer 可以將 HTML 和 CSS 轉換成專業級的 PDF 文件。 yield return 與 IronPDF 的實際用例是什麼? 實際用例是動態生成報告數據,然後使用 IronPDF 將這些數據轉換為 PDF。這種方法對於創建動態文檔非常有效,因為無需在記憶體中預生成所有內容。 在 C# 中使用 yield return 對開發人員有哪些主要好處? yield return 提供了多個好處,包括透過延遲評估提高記憶體效率、管理複雜的迭代方案的能力,以及生成無限序列而不會記憶體溢出的潛力。 如何安裝處理 PDF 的 C# 庫? 要在 C# 專案中安裝像 IronPDF 這樣的 PDF 操作庫,您可以使用 NuGet 套件管理器,命令如下:Install-Package IronPDF。 Curtis Chau 立即與工程團隊聊天 技術作家 Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。 相關文章 更新日期 9月 4, 2025 RandomNumberGenerator C# 使用RandomNumberGenerator C#類可以幫助將您的PDF生成和編輯項目提升至新水準 閱讀更多 更新日期 9月 4, 2025 C#字符串等於(它如何對開發者起作用) 當結合使用強大的PDF庫IronPDF時,開關模式匹配可以讓您構建更智能、更清晰的邏輯來進行文檔處理 閱讀更多 更新日期 8月 5, 2025 C#開關模式匹配(對開發者來說是如何工作的) 當結合使用強大的PDF庫IronPDF時,開關模式匹配可以讓您構建更智能、更清晰的邏輯來進行文檔處理 閱讀更多 C# REPL(開發者的工作原理)C# 陣列排序(開發者的工...