Yield-Schlüsselwort in C # - Wie funktioniert das Yield Keyword in C #? - Beispiele

Inhaltsverzeichnis:

Anonim

Einführung in das Yield-Schlüsselwort in C #

Ertrag ist ein kontextbezogenes Schlüsselwort in C #. Kontextschlüsselwörter sind die Schlüsselwörter in C #, die nicht für das gesamte Programm reserviert sind. Sie sind vielmehr reservierte Schlüsselwörter für bestimmte Teile des Programms, in denen das Schlüsselwort relevant verwendet werden kann. Diese Schlüsselwörter können als gültige Bezeichner verwendet werden, wenn ihre Relevanz dem Compiler keine besondere Bedeutung verleiht.

Das yield-Schlüsselwort gibt an, dass die Methode oder der Accessor, der das Schlüsselwort enthält, eine Iteratormethode / ein Accessor ist. Eine Iteratormethode / ein Accessor gibt keinen einzelnen Wert zurück. Vielmehr wird es in Iterationen aufgerufen und gibt in jeder Iteration unterschiedliche Werte zurück.

Syntax

Die Syntax des Schlüsselworts yield ist ziemlich einfach. Sie müssen lediglich das Schlüsselwort vor der return-Anweisung der Methode oder des Accessors angeben.

yield return ;

ODER

yield break;

Dies sind die beiden Implementierungen des Schlüsselworts. Bei Verwendung mit einer return-Anweisung gibt das yield-Schlüsselwort den nächsten aus dem Ausdruck berechneten Wert zurück, bis die Exit-Bedingung des Ausdrucks erfüllt ist. Bei Verwendung mit dem Schlüsselwort break unterbricht das Schlüsselwort yield die Iteration, und die Programmausführung erfolgt über die Methode / den Accessor.

Wie funktioniert das Yield Keyword in C #?

  1. Wie lautet das Schlüsselwort in C #? Wie lautet die interne Implementierung des Schlüsselworts im C # -Compiler? Lass uns verstehen. Die Methode, die das Schlüsselwort yield enthält, kann von einer Iteratorschleife wie foreach oder einer LINQ-Abfrage verwendet werden. Bei jeder Iteration der Schleife wird die Methode aufgerufen. Der Code in der Methode wird ausgeführt, bis eine Yield Return- oder Yield Break-Anweisung auftritt.
  2. Die aktuelle Position der Ausführung in der Methode wird beibehalten und die nächste Iteration wird an der Stelle fortgesetzt, an der sie in der vorherigen Iteration unterbrochen wurde.
  3. Das war einfach, nicht wahr? Kommen wir zur technischen Umsetzung derselben. Die Methode, die das Schlüsselwort yield enthält, muss immer einen IEnumerable oder IEnumerator zurückgeben. Immer wenn der Compiler auf das yield-Schlüsselwort stößt, weiß er, dass die Methode von einem Iterator verwendet wird. Beim Aufruf der Methode führt der Compiler den Methodentext nicht wie gewohnt aus.
  4. Vielmehr wird der Methodentext ausgeführt und eine kompilierte Menge von IEnumerables an die konsumierende Iteratorvariable zurückgegeben. Bei jedem Aufruf der Methode sucht der Compiler nach einer Yield-Anweisung und pausiert die Ausführung bei dieser Anweisung. Die nächste Iteration der Schleife setzt die Ausführung ab der letzten angehaltenen Position fort. Dies geht weiter bis zur Austrittsbedingung der Schleife oder einer Yield Break-Anweisung. Um die Statusinformationen nach jeder Iteration zu speichern, erstellt der Compiler eine Statusmaschine.

Beispiele für das Yield-Schlüsselwort in C #

Betrachten wir einige Beispiele:

Beispiel # 1 - Methode

Das folgende Beispiel generiert die Fibonacci-Reihe mit dem Schlüsselwort yield.

using System;
using System.Collections.Generic;
public class Program
(
public static void Main()
(
foreach (int ele in GetFibonacciSeries(10))
(
Console.Write(ele + "\t");
)
)
public static IEnumerable GetFibonacciSeries(int x)
(
for (int a = 0, b = 0, c = 1; a < x; a++)
(
yield return b;
int temp = b + c;
b = c;
c = temp;
)
)
)

Beispiel # 2 - Accessor

Im folgenden Beispiel wird das Schlüsselwort yield mit einem get-Accessor verwendet.

using System;
using System.Collections.Generic;
public class Program
(
public static void Main()
(
foreach (Day day in new Days().DaysOfWeek)
(
Console.WriteLine("Day (0) of the week is (1)", day.DayOfWeek, day.DayName);
)
)
public static IEnumerable Show(int x)
(
for (int a = 0, b = 0, c = 1; a < x; a++)
(
yield return b;
int temp = b + c;
b = c;
c = temp;
)
)
public class Days
(
public IEnumerable DaysOfWeek
(
get
(
yield return new Day(DayName = "Sunday", DayOfWeek = 1);
yield return new Day(DayName = "Monday", DayOfWeek = 2);
yield return new Day(DayName = "Tuesday", DayOfWeek = 3);
yield return new Day(DayName = "Wednesday", DayOfWeek = 4);
yield return new Day(DayName = "Thursday", DayOfWeek = 5);
yield return new Day(DayName = "Friday", DayOfWeek = 6);
yield return new Day(DayName = "Saturday", DayOfWeek = 7);
)
)
)
public class Day
(
public string DayName
( get; set; )
public int DayOfWeek
( get; set; )
)
)

Beispiel # 3 - Ausbeutepause

Das folgende Beispiel zeigt die Verwendung der Yield Break-Anweisung. Die Iteration wird abgebrochen, sobald eine Nummer in der Reihe gefunden wurde oder das maximale Suchlimit erreicht ist.

using System;
using System.Collections.Generic;
public class Program
(
public static void Main()
(
int elementToFind = 21;
int maxElements = 100;
foreach (int ele in FindFibonacciNumber(elementToFind, maxElements))
(
Console.Write("Found the number " + elementToFind + " in Fibonacci series.");
)
)
public static IEnumerable FindFibonacciNumber(int n, int max)
(
for (int a = 0, b = 0, c = 1; true; a++)
(
if (a > max)
(
Console.Write("Searched first " + max + " Fibonacci numbers. Element " + n + " not found");
yield break;
)
if (b == n)
(
yield return b;
yield break;
)
int temp = b + c;
b = c;
c = temp;
)
)
)

Wenn wir elementToFind 1234 ändern, lautet die Ausgabe:

Regeln

1) Jedes Element muss einzeln mit der Anweisung yield return zurückgegeben werden.
2) Der Rückgabetyp muss IEnumerable oder IEnumerator sein.
3) Sie können keine Keywords mit Ertrag eingeben, verweisen oder entfernen.
4) Das Yield-Schlüsselwort kann nicht mit Lambda-Ausdrücken oder anonymen Methoden verwendet werden.
5) Eine Yield Return-Anweisung darf sich nicht innerhalb eines Try-Catch-Blocks befinden. Es kann sich in einem try-finally-Block befinden.
6) Eine Yield Break-Anweisung darf sich nicht in einem Try-finally-Block befinden. Es kann sich in einem Try-Catch-Block befinden.

Vorteile

Das Schlüsselwort yield erspart die Erstellung temporärer Sammlungen. Sie müssen keine temporären Sammlungen erstellen, um die Daten zu speichern, bevor sie von der Methode zurückgegeben werden. Auch der Ausführungsstatus der Methode bleibt erhalten und muss daher nicht explizit im Code gespeichert werden.

Fazit - Yield Keyword in C #

Aus diesem Artikel haben wir gelernt, dass das Ermitteln von Schlüsselwörtern ein sehr nützliches Schlüsselwort in C # ist. Es hilft beim Codieren komplexer Probleme mit möglichst wenigen Zeilen und macht den Code leicht verständlich. Dies war ein Artikel für Fortgeschrittene über die C # -Reise. Es wird empfohlen, das Schlüsselwort in Ihrem Code zu verwenden, um praktische Übungen zu erhalten.

Empfohlene Artikel

Dies ist eine Anleitung zum Yield Keyword in C #. Hier diskutieren wir, wie man Schlüsselworte in C # mit Beispielen, Vorteilen und Regeln liefert. Sie können auch den folgenden Artikel lesen, um mehr zu erfahren -

  1. Überschreiben in C #
  2. Namensräume in C #
  3. Zeiger in C #
  4. Destruktor in C #
  5. PHP-Schlüsselwörter
  6. Iterator in Java
  7. Arbeits- und Top-3-Aufzählungsmethoden in C #
  8. Fibonacci-Serie In JavaScript mit Beispielen
  9. Komplette Anleitung zum Destruktor in PHP