IRONSOFTWAREHOME
开发者更新

C# Yield Return(开发者如何使用)

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

C#是微软开发的最流行的编程语言之一,它提供的功能使您的代码更优雅和高效。 其中一个这样的特性是yield关键字,该关键字最早在C# 2.0中引入。微软在其官方文档上提供了有关yield关键字语句的完整语言参考,以便您探索如何在迭代器方法中使用它们。

在本文中,我们将在C#中研究yield return,探讨其功能、用例以及如何改变您处理迭代的方式。

Understanding the Basics: Iteration in C#

迭代是编程中的一个基本概念,C#提供了多种机制来实现它。 传统上,像for和foreach循环一直是迭代集合的首选工具。 然而,C#通过应用于return语句的yield关键字,以及通过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
        }
    }
}

在这个示例中,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
        }
    }
}

在此示例中,yield return创建一个斐波那契数列。 状态在迭代之间保持,从而确保Fibonacci数的高效生成和输出。

构建无限序列

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 return一起使用,以停止和退出循环,从而为循环创建自定义迭代。

介绍IronPDF:强大的C#库

C# Yield Return (How It Works For Developers):图1 - IronPDF网页

IronPDF是一个多功能的C#库,旨在简化处理PDF的复杂性。 无论您是在生成发票、报告还是其他任何文档,IronPDF 都可以让您无缝地将 HTML 内容直接转换为高质量的专业 PDF,嵌入到您的 C# 应用程序中。

安装 IronPDF:快速入门

要将IronPDF集成到您的C#项目中,您可以快速安装IronPDF NuGet包。 或者,在NuGet包管理器中找到"IronPDF"并继续安装。

PM > 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");
    }
}

在上述示例中,使用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");
    }
}

在这个示例中,yield return提供动态项序列。 生成的内容随后被合并到HTML结构中并由IronPDF用于创建PDF文档。

C# Yield Return (How It Works For Developers):图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 一起将公司转变为一家拥有 50 多名员工的公司,为 NASA、特斯拉和全球政府机构提供服务。

相关文章

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 起