Inleiding tot opbrengstwoordwoord in C #

Opbrengst is een contextueel trefwoord in C #. Contextuele sleutelwoorden zijn die sleutelwoorden in C # die niet zijn gereserveerd voor het volledige programma. Het zijn eerder gereserveerde sleutelwoorden voor bepaalde delen van het programma waar het sleutelwoord relevant kan worden gebruikt. Deze trefwoorden kunnen worden gebruikt als geldige identificatiegegevens wanneer hun relevantie geen speciale betekenis heeft voor de compiler.

Het opbrengst-trefwoord geeft aan dat de methode of de accessor die het trefwoord bevat een iterator-methode / accessor is. Een iterator-methode / accessor is er een die geen enkele waarde retourneert. Het wordt eerder iteraties genoemd en retourneert verschillende waarden in elke iteratie.

Syntaxis

De syntaxis van het opbrengstwoordwoord is vrij eenvoudig. U hoeft alleen het trefwoord op te geven vóór de retourverklaring van de methode of de accessor.

yield return ;

OF

yield break;

Dit zijn de twee implementaties van het trefwoord. In combinatie met een retourinstructie retourneert het sleutelwoord yield de volgende waarde berekend op basis van de uitdrukking, totdat aan de exit-voorwaarde van de uitdrukking is voldaan. In combinatie met het sleutelwoord break verbreekt het opbrengstwoord de iteratie en komt de uitvoering van het programma uit de methode / accessor.

Hoe werkt opbrengstwoord in C #?

  1. Dus, hoe werkt het trefwoordwoord in C #? Wat is de interne implementatie van het trefwoord in de C # compiler? Laten we begrijpen. De methode die het opbrengstwoord bevat, kan worden gebruikt door een iteratorlus zoals foreach of LINQ-query. Elke iteratie van de lus roept de methode op. De code in de methode wordt uitgevoerd totdat een rendement-rendement of rendement-einde-instructie wordt aangetroffen.
  2. De huidige positie van de uitvoering in de methode blijft behouden en de volgende iteratie gaat verder vanaf waar het was gestopt in de vorige iteratie.
  3. Dit was eenvoudig, toch? Laten we de technische implementatie van hetzelfde bespreken. De methode die het opbrengstwoord bevat, moet altijd een IEnumerable of IEnumerator retourneren. Wanneer de compiler het sleutelwoord yield tegenkomt, weet hij dat de methode wordt gebruikt door een iterator. Wanneer de methode wordt aangeroepen, voert de compiler de methode niet uit zoals normaal.
  4. Het voert eerder de methode body uit en retourneert een gecompileerde set IEnumerables naar de consumerende iterator-variabele. Bij elke aanroep van de methode zoekt de compiler naar een rendementsoverzicht en pauzeert de uitvoering bij dat statement. De volgende iteratie van de lus zet de uitvoering voort vanaf de laatst gepauzeerde locatie. Dit gaat door tot de exitconditie van de lus of een yield break-statement. Om de statusinformatie na elke iteratie op te slaan, maakt de compiler een statusmachine.

Voorbeelden van opbrengstwoordwoord in C #

Laten we enkele voorbeelden bekijken:

Voorbeeld # 1 - Methode

Het onderstaande voorbeeld genereert de Fibonacci-serie met behulp van het yield-trefwoord.

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;
)
)
)

Voorbeeld # 2 - Accessor

In het volgende voorbeeld wordt het opbrengstwoord gebruikt met een get-accessor.

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; )
)
)

Voorbeeld # 3 - opbrengstbreuk

Het volgende voorbeeld demonstreert het gebruik van de yield break-instructie. De iteratie wordt beëindigd zodra een nummer in de reeks wordt gevonden of de maximale zoeklimiet wordt bereikt.

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;
)
)
)

Als we elementToFind 1234 wijzigen, is de uitvoer -

Reglement

1) Elk element moet één voor één worden geretourneerd met behulp van de rendementsoverzicht.
2) Het retourtype moet een IEnumerable of IEnumerator zijn.
3) U kunt het niet gebruiken in, referen of uit zoekwoorden met opbrengst.
4) Opbrengstwoord kan niet worden gebruikt met Lambda-uitdrukkingen of Anonieme methoden.
5) Een opbrengstrendement mag zich niet binnen een try-catch-blok bevinden. Het kan in een try-eindelijk-blok zitten.
6) Een statement voor rendementsbreuk kan zich niet in een try-eindelijk-blok bevinden. Het kan in een try-catch-blok zijn.

voordelen

Het opbrengstwoord bespaart de noodzaak om tijdelijke collecties te maken. U hoeft geen tijdelijke collecties te maken om de gegevens op te slaan voordat deze worden geretourneerd vanuit de methode. Ook blijft de uitvoeringsstatus van de methode behouden en hoeft deze dus niet expliciet in de code te worden opgeslagen.

Conclusie - zoekwoord opbrengst in C #

We hebben uit dit artikel geleerd dat het genereren van zoekwoorden een zeer handig trefwoord is in C #. Het helpt complexe problemen met zo weinig mogelijk regels te coderen en maakt de code ook gemakkelijk te begrijpen. Dit was een geavanceerd artikel over de C # -reis. Het wordt aanbevolen om het trefwoord in uw code te gebruiken, zodat u praktijkgericht kunt oefenen.

Aanbevolen artikelen

Dit is een gids voor zoekwoord rendement in C #. Hier bespreken we hoe trefwoord oplevert werkt in C # met voorbeelden, voordelen en regels. U kunt ook het volgende artikel bekijken voor meer informatie -

  1. Overschrijven in C #
  2. Naamruimten in C #
  3. Aanwijzers in C #
  4. Destructor in C #
  5. PHP-zoekwoorden
  6. Iterator op Java
  7. Werken en Top 3 Enum-methoden in C #
  8. Fibonacci-serie in JavaScript met voorbeelden
  9. Volledige gids voor Destructor in PHP