在实际环境中测试
在生产中测试无水印。
随时随地为您服务。
C# 是微软开发的最流行的编程语言之一,它提供的功能可为您的代码增添优雅和高效。 C# 2.0 中首次引入的 yield 关键字就是这样一个功能。微软提供了关于 yield 关键字语句的完整语言参考,以探索在迭代器方法中使用它们的更多信息,您可以在关于产量的微软官方文档.
在本文中,我们将研究 C# 中的产量返回,探讨其功能、用例以及如何改变您处理迭代的方式。
迭代是编程中的一个基本概念,C# 提供了实现迭代的各种机制。 传统上,for 循环和foreach 循环等循环是对集合进行迭代的常用工具。 然而,C# 通过将yield 关键字应用于return 语句,并通过使用 Inumerable
接口,引入了一种更优雅的解决方案。
yield return "是迭代器方法中使用的语句,其核心是提供一种更有效的方法来生成值序列。 它允许您创建一个迭代器,而无需在内存中生成整个集合,因此对大型数据集或无限序列特别有用。
下面是一个简单的代码片段,用于说明 yield return
的基本用法:
public IEnumerable<int> GenerateNumbers(int start, int end)
{
// for loop goes through numbers, start to end
for (int i = start; i <= end; i++)
{
yield return i; // returns each number without breaking the loop
}
}
// Usage
// foreach loop calls the previous function
foreach (var number in GenerateNumbers(1, 5))
{
Console.WriteLine(number); // Outputs numbers 1 - 5
}
public IEnumerable<int> GenerateNumbers(int start, int end)
{
// for loop goes through numbers, start to end
for (int i = start; i <= end; i++)
{
yield return i; // returns each number without breaking the loop
}
}
// Usage
// foreach loop calls the previous function
foreach (var number in GenerateNumbers(1, 5))
{
Console.WriteLine(number); // Outputs numbers 1 - 5
}
Public Iterator Function GenerateNumbers(ByVal start As Integer, ByVal [end] As Integer) As IEnumerable(Of Integer)
' for loop goes through numbers, start to end
For i As Integer = start To [end]
Yield i ' returns each number without breaking the loop
Next i
End Function
' Usage
' foreach loop calls the previous function
For Each number In GenerateNumbers(1, 5)
Console.WriteLine(number) ' Outputs numbers 1 - 5
Next number
在此示例中,"GenerateNumbers "方法使用 "yield return "生成从 "start "到 "end "的数字序列。 迭代器采用懒惰评估方式,这意味着每个数字都是在迭代执行过程中按需生成的。
yield return "语句的一个显著优势是它能够支持懒评估。 与在迭代前生成整个集合的传统方法不同,yield return
一次只生成一个值。这可以大大节省内存,尤其是在处理大型数据集时。
yield return "语句不仅限于生成简单的序列; 它擅长处理迭代块中更复杂的情况。 通过维护跨迭代的状态机,您可以创建能够记住其在序列中位置的迭代器。
public IEnumerable<string> GenerateFibonacci(int count)
{
int a = 0, b = 1;
for (int i = 0; i < count; i++)
{
yield return a.ToString(); // returns 'a' value in the middle of the for loop
int temp = a;
a = b;
b = temp + b;
}
}
// Usage
// foreach loop that calls the previous iterator function
foreach (var fibNumber in GenerateFibonacci(8))
{
Console.WriteLine(fibNumber); // Outputs a Fibonacci number sequence
}
public IEnumerable<string> GenerateFibonacci(int count)
{
int a = 0, b = 1;
for (int i = 0; i < count; i++)
{
yield return a.ToString(); // returns 'a' value in the middle of the for loop
int temp = a;
a = b;
b = temp + b;
}
}
// Usage
// foreach loop that calls the previous iterator function
foreach (var fibNumber in GenerateFibonacci(8))
{
Console.WriteLine(fibNumber); // Outputs a Fibonacci number sequence
}
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 'a' value in the middle of the for loop
Dim temp As Integer = a
a = b
b = temp + b
Next i
End Function
' Usage
' foreach loop that calls the previous iterator function
For Each fibNumber In GenerateFibonacci(8)
Console.WriteLine(fibNumber) ' Outputs a Fibonacci number sequence
Next fibNumber
在本例中,"GenerateFibonacci "方法使用 "yield return "创建斐波那契数列。 在迭代之间保持状态,确保高效生成和输出斐波那契数字。
yield return "的一个引人入胜的应用是它能够创建无限的值序列。 由于值是即时生成的,因此您可以表示永远持续下去的序列,而不会消耗无限的内存。
public IEnumerable<int> GenerateEvenNumbers()
{
int num = 0;
while (true)
{
yield return num;
num += 2;
}
}
// Usage
var evenNumberIterator = GenerateEvenNumbers().GetEnumerator();
for (int i = 0; i < 5; i++)
{
evenNumberIterator.MoveNext();
Console.WriteLine(evenNumberIterator.Current);
}
public IEnumerable<int> GenerateEvenNumbers()
{
int num = 0;
while (true)
{
yield return num;
num += 2;
}
}
// Usage
var evenNumberIterator = GenerateEvenNumbers().GetEnumerator();
for (int i = 0; i < 5; i++)
{
evenNumberIterator.MoveNext();
Console.WriteLine(evenNumberIterator.Current);
}
Public Iterator Function GenerateEvenNumbers() As IEnumerable(Of Integer)
Dim num As Integer = 0
Do
Yield num
num += 2
Loop
End Function
' Usage
Private evenNumberIterator = GenerateEvenNumbers().GetEnumerator()
For i As Integer = 0 To 4
evenNumberIterator.MoveNext()
Console.WriteLine(evenNumberIterator.Current)
Next i
在本例中,GenerateEvenNumbers
方法为偶数创建了一个迭代器,您可以根据需要对其进行迭代。 您还可以使用 yield break
语句和 yield return
语句来停止和退出循环,为循环进行自定义迭代。
IronPDF作为一个多功能 C# 库,《PDF 转换器》脱颖而出,旨在简化处理 PDF 的复杂性。 无论您是要生成发票、报告还是其他任何文档,IronPDF 都能让您在 C# 应用程序中直接将 HTML 内容无缝转换为精美、专业的 PDF。
要将 IronPDF 纳入您的 C# 项目,您可以迅速安装 IronPDF NuGet 软件包。 在软件包管理器控制台中执行以下命令:
安装-打包 IronPdf
或者,您也可以在 NuGet 包管理器中找到 "IronPdf",然后从那里进行安装。
使用 IronPDF 创建 PDF 是一个简单明了的过程。 让我们举一个基本的例子:
var htmlContent = "<html><body><h1>Hello, IronPDF!</h1></body></html>";
// Create a new PDF document
var pdfDocument = new IronPdf.ChromePdfRenderer();
pdfDocument.RenderHtmlAsPdf(htmlContent).SaveAs("C:/GeneratedDocument.pdf");
var htmlContent = "<html><body><h1>Hello, IronPDF!</h1></body></html>";
// Create a new PDF document
var pdfDocument = new IronPdf.ChromePdfRenderer();
pdfDocument.RenderHtmlAsPdf(htmlContent).SaveAs("C:/GeneratedDocument.pdf");
Dim htmlContent = "<html><body><h1>Hello, IronPDF!</h1></body></html>"
' Create a new PDF document
Dim pdfDocument = New IronPdf.ChromePdfRenderer()
pdfDocument.RenderHtmlAsPdf(htmlContent).SaveAs("C:/GeneratedDocument.pdf")
在上例中,IronPDF 用于渲染将 HTML 内容转化为 PDF 文档**翻译完成后,译文将被保存到指定位置。 更多详细信息,请访问IronPDF 文档.
yield return
和 IronPDF 的交集现在,让我们来探讨 "yield return "语句这一用于懒惰评估和高效迭代的强大工具能否与 IronPDF 无缝集成。
假设您需要使用 "yield return "生成包含项目列表的 PDF 文档。 您可以利用 yield
语句的优势动态生成内容,然后采用 IronPDF 将内容转换为 PDF。 以下代码片段借助 "yield "语句生成 PDF 文档,以添加对 PDF 内容的动态控制:
class Program
{
static void Main(string [] args)
{
public IEnumerable<string> GenerateDynamicContent()
{
yield return "Item 1";
yield return "Item 2";
yield return "Item 3";
}
// Usage
var dynamicContent = GenerateDynamicContent();
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 dynamicPdfDocument = new IronPdf.ChromePdfRenderer();
dynamicPdfDocument.RenderHtmlAsPdf(dynamicPdfContent).SaveAs("C:/DynamicItems.pdf");
}
}
class Program
{
static void Main(string [] args)
{
public IEnumerable<string> GenerateDynamicContent()
{
yield return "Item 1";
yield return "Item 2";
yield return "Item 3";
}
// Usage
var dynamicContent = GenerateDynamicContent();
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 dynamicPdfDocument = new IronPdf.ChromePdfRenderer();
dynamicPdfDocument.RenderHtmlAsPdf(dynamicPdfContent).SaveAs("C:/DynamicItems.pdf");
}
}
Friend Class Program
Shared Sub Main(ByVal args() As String)
'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
' public IEnumerable(Of string) GenerateDynamicContent()
' {
' yield Return "Item 1";
' yield Return "Item 2";
' yield Return "Item 3";
' }
' Usage
Dim dynamicContent = GenerateDynamicContent()
, 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 dynamicPdfDocument = New IronPdf.ChromePdfRenderer()
dynamicPdfDocument.RenderHtmlAsPdf(dynamicPdfContent).SaveAs("C:/DynamicItems.pdf")
End Sub
End Class
在本例中,"GenerateDynamicContent"(生成动态内容)方法使用 "yield return"(返回)来提供动态项序列。 然后将生成的内容纳入 HTML 结构,并由 IronPDF 用于创建 PDF 文档。
总之,"yield return "是 C# 中一个强大而优雅的功能,它改变了您处理迭代的方式。 它能够支持懒惰评估、通过有状态迭代处理复杂场景并创建无限序列,是您编程工具包中的重要工具。 无论您是处理大型数据集还是执行复杂的算法,"yield return "都能让您编写出更高效、更具表现力的代码。
在 "产量回报 "促进高效和按需生成内容的同时,IronPDF 的介入将这些内容无缝转换为专业的 PDF 文档。 无论您是动态创建列表、报告还是其他任何文档,这种协同作用都能让您将 C# 文档生成能力提升到新的高度。 利用这对动态组合的潜力,让您的 PDF 文件通过动态和高效生成的内容大放异彩!
IronPDF 提供了一个免费试用您可以像在商业模式下一样测试其完整功能。 了解更多关于IronPDF 许可证从 $749 开始。