using IronPdf;
// Disable local disk access or cross-origin requests
Installation.EnableWebSecurity = true;
// Instantiate Renderer
var renderer = new ChromePdfRenderer();
// Create a PDF from a HTML string using C#
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
// Export to a file or Stream
pdf.SaveAs("output.pdf");
// Advanced Example with HTML Assets
// Load external html assets: Images, CSS and JavaScript.
// An optional BasePath 'C:\site\assets\' is set as the file location to load assets from
var myAdvancedPdf = renderer.RenderHtmlAsPdf("<img src='icons/iron.png'>", @"C:\site\assets\");
myAdvancedPdf.SaveAs("html-with-assets.pdf");
C# Yield Return (So funktioniert es für Entwickler)
Chipego Kalinda
27. Januar 2024
Teilen Sie:
C# ist eine der beliebtesten Programmiersprachen, die von Microsoft entwickelt wurde. Sie bietet Funktionen, die Ihrem Code Eleganz und Effizienz verleihen. Eine solche Funktion ist das Schlüsselwort yield, das erstmals in C# 2.0 eingeführt wurde. Microsoft bietet eine vollständige Sprachreferenz zu yield-Schlüsselwort-Anweisungen, um mehr über deren Verwendung in Iterator-Methoden zu erfahren. Diese können Sie in der offiziellen Microsoft-Dokumentation zu yield einsehen.
In diesem Artikel beschäftigen wir uns mit yield return in C#, untersuchen seine Funktionalität, Anwendungsfälle und wie es die Herangehensweise an Iterationen verändern kann.
Die Grundlagen verstehen: Iteration in C##
Iteration ist ein grundlegendes Konzept in der Programmierung, und C# bietet verschiedene Mechanismen, um dies zu erreichen. Traditionell sind Schleifen wie die for-Schleife und die foreach-Schleife die bevorzugten Werkzeuge zum Iterieren über Sammlungen gewesen. Allerdings führt C# eine elegantere Lösung ein, indem das yield-Schlüsselwort auf die return-Anweisung angewendet wird, und durch die Verwendung der IEnumerable-Schnittstelle.
Die Effizienz der yield return-Anweisung
Im Kern ist yield return eine Anweisung, die in der Iterator-Methode verwendet wird, um eine effizientere Art der Erzeugung einer Sequenz von Werten zu bieten. Damit können Sie einen Iterator erstellen, ohne eine ganze Sammlung im Speicher erzeugen zu müssen, was besonders bei großen Datensätzen oder unendlichen Sequenzen nützlich ist.
Hier ist ein einfacher Codeausschnitt, um die grundlegende Verwendung von yield return zu veranschaulichen:
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
$vbLabelText $csharpLabel
In diesem Beispiel verwendet die GenerateNumbers-Methode yield return, um eine Sequenz von Zahlen von start bis end zu erzeugen. Der Iterator wird träge ausgewertet, d. h. jede Zahl wird bei Bedarf während der Ausführung der Iteration erzeugt.
Faule Bewertung und Effizienz
Einer der wesentlichen Vorteile der yield return-Anweisung ist ihre Fähigkeit, Lazy Evaluation zu unterstützen. Im Gegensatz zu herkömmlichen Methoden, die eine gesamte Sammlung vor der Iteration erzeugen, gibt yield return Werte einzeln aus. Dies kann zu erheblichen Speicherersparnissen führen, insbesondere beim Umgang mit großen Datensätzen.
Die yield return-Anweisung ist nicht nur auf die Erzeugung einfacher Sequenzen beschränkt; es zeichnet sich durch die Handhabung komplexerer Szenarien im Iteratorblock aus. Indem Sie einen Zustandsautomaten über Iterationen hinweg beibehalten, können Sie Iteratoren erstellen, die sich ihre Position in der Sequenz merken.
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
$vbLabelText $csharpLabel
In diesem Beispiel verwendet die GenerateFibonacci-Methode yield return, um eine Fibonacci-Zahlenfolge zu erzeugen. Der Zustand wird zwischen den Iterationen beibehalten, was eine effiziente Erzeugung und Ausgabe von Fibonacci-Zahlen gewährleistet.
Aufbau unendlicher Sequenzen
Eine faszinierende Anwendung von yield return ist die Fähigkeit, unendliche Folgen von Werten zu erzeugen. Da die Werte in Echtzeit generiert werden, können Sie unendlich lange Sequenzen darstellen, ohne unendlich viel Speicher zu verbrauchen.
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
$vbLabelText $csharpLabel
In diesem Beispiel erstellt die GenerateEvenNumbers-Methode einen Iterator für gerade Zahlen, und Sie können bei Bedarf darüber iterieren. Sie können auch die Anweisung yield break zusammen mit yield return verwenden, um die Schleife zu stoppen und zu beenden, wodurch eine benutzerdefinierte Iteration für die Schleife erstellt wird.
Einführung in IronPDF: Eine leistungsstarke C#-Bibliothek
IronPDF zeichnet sich als eine vielseitige C#-Bibliothek aus, die darauf abzielt, die Komplexitäten bei der Arbeit mit PDFs zu vereinfachen. Egal, ob Sie Rechnungen, Berichte oder andere Dokumente erstellen, IronPDF ermöglicht Ihnen die nahtlose Konvertierung von HTML-Inhalten in ausgefeilte und professionelle PDFs direkt in Ihrer C#-Anwendung.
Installation von IronPDF: Ein Schnellstart
Um IronPDF in Ihr C#-Projekt einzubinden, können Sie das IronPDF NuGet-Paket schnell installieren. Führen Sie den folgenden Befehl in Ihrer Paketmanager-Konsole aus:
Installations-Paket IronPDF
Alternativ können Sie "IronPDF" im NuGet Package Manager suchen und von dort aus installieren.
Erzeugen von PDFs mit IronPDF
Die Erstellung einer PDF-Datei mit IronPDF ist ein unkomplizierter Prozess. Schauen wir uns ein einfaches Beispiel an:
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")
$vbLabelText $csharpLabel
Im obigen Beispiel wird IronPDF verwendet, um HTML-Inhalte in ein PDF-Dokument zu rendern, das dann am angegebenen Ort gespeichert wird. Für ausführlichere Informationen besuchen Sie bitte die IronPDF-Dokumentation.
Der Schnittpunkt von yield return und IronPDF
Nun lassen Sie uns untersuchen, ob die yield return-Anweisung, ein leistungsstarkes Werkzeug für Lazy Evaluation und effiziente Iteration, nahtlos mit IronPDF integriert werden kann.
Betrachten Sie ein Szenario, in dem Sie ein PDF-Dokument mit einer Liste von Elementen mithilfe von yield return erstellen müssen. Sie können die Vorteile von yield-Anweisungen nutzen, um Inhalte dynamisch zu erzeugen und dann IronPDF verwenden, um diese Inhalte in ein PDF zu verwandeln. Der folgende Codeausschnitt erstellt ein PDF-Dokument mithilfe einer yield-Anweisung, um dynamische Kontrolle über den PDF-Inhalt zu ermöglichen:
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
$vbLabelText $csharpLabel
In diesem Beispiel nutzt die GenerateDynamicContent-Methode yield return, um eine Sequenz dynamischer Elemente bereitzustellen. Der generierte Inhalt wird dann in eine HTML-Struktur eingebunden und von IronPDF zur Erstellung eines PDF-Dokuments verwendet.
Schlussfolgerung
Abschließend lässt sich sagen, dass yield return eine leistungsstarke und elegante Funktion in C# ist, die Ihre Herangehensweise an Iterationen verändert. Seine Fähigkeit, träge Auswertung zu unterstützen, komplexe Szenarien mit zustandsbehafteter Iteration zu behandeln und unendliche Sequenzen zu erstellen, macht es zu einem wertvollen Werkzeug in Ihrem Programmier-Toolkit. Ganz gleich, ob Sie mit großen Datensätzen arbeiten oder anspruchsvolle Algorithmen implementieren, yield return ermöglicht es Ihnen, effizienteren und ausdrucksstärkeren Code zu schreiben.
Während yield return die effiziente und bedarfsgerechte Generierung von Inhalten ermöglicht, tritt IronPDF ein, um diese Inhalte nahtlos in professionelle PDF-Dokumente zu konvertieren. Ganz gleich, ob Sie Listen, Berichte oder andere Dokumente dynamisch erstellen, diese Synergie ermöglicht es Ihnen, Ihre C#-Dokumentenerstellungsfähigkeiten auf ein neues Niveau zu heben. Nutzen Sie das Potenzial dieses dynamischen Duos und lassen Sie Ihre PDFs mit dynamisch und effizient erzeugtem Inhalt glänzen!
IronPDF bietet eine kostenlose Testversion an, um die vollständige Funktionalität wie im kommerziellen Modus zu testen. Erfahren Sie mehr über IronPDF-Lizenzen ab $749.
Chipego hat eine natürliche Fähigkeit zum Zuhören, die ihm hilft, Kundenprobleme zu verstehen und intelligente Lösungen anzubieten. Er trat dem Iron Software-Team 2023 bei, nachdem er einen Bachelor of Science in Informationstechnologie erworben hatte. IronPDF und IronOCR sind die beiden Produkte, auf die sich Chipego konzentriert hat, aber sein Wissen über alle Produkte wächst täglich, da er neue Wege findet, Kunden zu unterstützen. Er genießt die Zusammenarbeit bei Iron Software, da Teammitglieder aus dem gesamten Unternehmen ihre unterschiedlichen Erfahrungen einbringen und so zu effektiven, innovativen Lösungen beitragen. Wenn Chipego nicht an seinem Schreibtisch sitzt, kann man ihn oft bei einem guten Buch oder beim Fußballspielen antreffen.
< PREVIOUS C# REPL (Wie es für Entwickler funktioniert)
NÄCHSTES > C# Array Sort (Wie es für Entwickler funktioniert)