Test in einer Live-Umgebung
Test in der Produktion ohne Wasserzeichen.
Funktioniert überall, wo Sie es brauchen.
C# ist eine der beliebtesten Programmiersprachen, die von Microsoft entwickelt wurde. Sie bietet Funktionen, die Ihrem Code Eleganz und Effizienz verleihen. Ein solches Feature ist das Yield-Schlüsselwort, das erstmals in C# 2.0 eingeführt wurde. Microsoft bietet eine vollständige Sprachreferenz zu den Yield-Schlüsselwortanweisungen, um mehr über deren Verwendung in Iteratormethoden zu erfahren hier.
In diesem Artikel befassen wir uns mit yield return in C# und untersuchen seine Funktionalität, Anwendungsfälle und wie es die Art und Weise verändern kann, wie Sie Iteration angehen.
Iteration ist ein grundlegendes Konzept in der Programmierung, und C# bietet verschiedene Mechanismen, um dies zu erreichen. Traditionell sind Schleifen wie die for- und die foreach-Schleife die bevorzugten Werkzeuge für die Iteration über Sammlungen. C# bietet jedoch eine elegantere Lösung mit dem Schlüsselwort yield, das auf die Anweisung return angewendet wird, und durch die Verwendung der Schnittstelle IEnumerable
.
Im Kern ist "yield return" eine Anweisung, die in der Iterator-Methode verwendet wird, um eine effizientere Methode zur Erzeugung einer Folge 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 Codeschnipsel zur Veranschaulichung der grundlegenden Verwendung von 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
In diesem Beispiel verwendet die Methode GenerateNumbers
yield return
, um eine Folge 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.
Einer der wesentlichen Vorteile der Anweisung yield return
ist ihre Fähigkeit, eine träge Auswertung zu unterstützen. Im Gegensatz zu herkömmlichen Methoden, die vor der Iteration eine ganze Sammlung erzeugen, werden bei yield return
die Werte einzeln erzeugt. Dies kann zu erheblichen Speichereinsparungen führen, insbesondere bei großen Datensätzen.
Die Anweisung yield return
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
In diesem Beispiel verwendet die Methode GenerateFibonacci
yield return
, um eine Fibonacci-Zahlenfolge zu erstellen. Der Zustand wird zwischen den Iterationen beibehalten, was eine effiziente Erzeugung und Ausgabe von Fibonacci-Zahlen gewährleistet.
Eine faszinierende Anwendung von yield return
ist seine 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
In diesem Beispiel erzeugt die Methode GenerateEvenNumbers
einen Iterator für gerade Zahlen, über den Sie nach Bedarf iterieren können. Sie können auch die Anweisung "yield break" zusammen mit "yield return" verwenden, um die Schleife anzuhalten und zu beenden und eine eigene Iteration für die Schleife zu erstellen.
IronPDF zeichnet sich als vielseitige C#-Bibliothek aus, die die komplexe Arbeit mit PDFs vereinfacht. 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.
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.
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")
Im obigen Beispiel wird IronPDF zum Rendern verwendet HTML-Inhalt in ein PDF-Dokumentdie dann an dem angegebenen Ort gespeichert wird. Ausführlichere Informationen finden Sie auf der Website Dokumentation seite.
Lassen Sie uns nun untersuchen, ob die Anweisung yield return
, ein leistungsfähiges Werkzeug für träge Auswertung und effiziente Iteration, nahtlos in IronPDF integriert werden kann.
Stellen Sie sich ein Szenario vor, in dem Sie ein PDF-Dokument mit einer Liste von Elementen unter Verwendung von yield return
erzeugen müssen. Sie können die Vorteile der "yield"-Anweisungen nutzen, um dynamisch Inhalte zu generieren und diese dann mit IronPDF in ein PDF-Dokument umzuwandeln. Das folgende Codeschnipsel generiert ein PDF-Dokument mit Hilfe einer "yield"-Anweisung, um die dynamische Kontrolle über den PDF-Inhalt hinzuzufügen:
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
In diesem Beispiel verwendet die Methode "GenerateDynamicContent" "Yield Return", um eine Folge von dynamischen Elementen bereitzustellen. Der generierte Inhalt wird dann in eine HTML-Struktur eingebunden und von IronPDF zur Erstellung eines PDF-Dokuments verwendet.
Zusammenfassend lässt sich sagen, dass yield return
eine mächtige und elegante Funktion in C# ist, die die Art und Weise, wie man an Iteration herangeht, 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 aussagekräftigeren Code zu schreiben.
Während "Yield Return" die effiziente und bedarfsgerechte Erstellung von Inhalten erleichtert, sorgt IronPDF für die nahtlose Konvertierung dieser Inhalte in professionelle PDF-Dokumente. 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 dynamischen und effizient generierten Inhalten glänzen!
IronPDF bietet eine kostenloser Test um die vollständige Funktionalität wie im kommerziellen Modus zu testen. Lizenzen von $749 starten.
9 .NET API-Produkte für Ihre Bürodokumente