Introduktion til Yield Keywords i C #

Yield er et kontekstuelt nøgleord i C #. Kontekstuelle nøgleord er de nøgleord i C #, som ikke er forbeholdt det komplette program. De er snarere reserverede nøgleord til bestemte dele af programmet, hvor nøgleordet kan bruges relevant. Disse nøgleord kan bruges som gyldige identifikatorer, uanset hvor deres relevans ikke overfører nogen særlig betydning til compileren.

Udbytteøgleordet angiver, at metoden eller accessoren, der indeholder nøgleordet, er en iteratormetode / accessor. En iteratormetode / accessor er en, der ikke returnerer en enkelt værdi. Snarere kaldes det i iterationer og returnerer forskellige værdier i hver iteration.

Syntaks

Syntaks for udbyttetøgleordet er ret simpelt. Du skal blot specificere nøgleordet før metodens eller accessorens retursangivelse.

yield return ;

ELLER

yield break;

Dette er de to implementeringer af nøgleordet. Når det bruges sammen med en returopgørelse, returnerer udbyttesøgeordet den næste værdi beregnet fra udtrykket, indtil udgangsbetingelsen for udtrykket er opfyldt. Når det bruges med break-nøgleordet, bryder udbytte-nøgleordet iterationen, og programudførelse kommer ud af metoden / accessoren.

Hvordan fungerer Yield Keywords i C #?

  1. Så hvordan fungerer nøgleordet ord i C #? Hvad er den interne implementering af nøgleordet i C # -kompilatoren? Lad os forstå. Metoden, der indeholder udbyttenøgleordet, kan forbruges af en iterator-loop, såsom foreach eller LINQ-forespørgsel. Hver iteration af loopen ringer til metoden. Koden i metoden udføres, indtil der foreligger en opgørelse om afkast eller afkast.
  2. Den aktuelle position for udførelsen i metoden bevares, og den næste iteration fortsætter fra hvor den slap i den forrige iteration.
  3. Dette var enkelt, var det ikke? Lad os komme ind på den tekniske implementering af det samme. Metoden, der indeholder udbyttenøgleordet, skal altid returnere en IEnumerable eller IEnumerator. Hver gang kompilatoren støder på udbyttetøgleordet, ved den, at metoden forbruges af en iterator. Når metoden kaldes, udfører kompilatoren ikke metodekroppen, som den normalt gør.
  4. Den udfører snarere metodekroppen og returnerer et samlet sæt af IEnumerables til den fortærende iteratorvariabel. Ved hvert opkald af metoden søger kompilatoren efter en udbytteopgørelse og sætter udførelsen på pause i denne erklæring. Den næste iteration af løkken fortsætter udførelsen fra det sidste sted, der er sat på pause. Dette fortsætter, indtil loopens udgangsbetingelse eller en opgørelse om udbytte. For at gemme tilstandsoplysningerne efter hver iteration opretter compileren en tilstandsmaskine.

Eksempler på Yield Keywords i C #

Lad os overveje nogle eksempler:

Eksempel 1 - Metode

Eksemplet nedenfor genererer Fibonacci-serien ved hjælp af udbytteøgleordet.

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

Eksempel 2 - Accessor

Følgende eksempel bruger udbyttetøgleordet med en 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; )
)
)

Eksempel 3 - udbytte pause

Følgende eksempel viser brugen af ​​opgørelsen om udbyttebrud. Iterationen afsluttes, så snart et tal i serien findes, eller den maksimale søgegrænse er nået.

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

Hvis vi ændrer elementToFind 1234, vil output være -

Regler

1) Hvert element skal returneres én ad gangen ved hjælp af udbytteopgørelsen.
2) Returtypen skal være en IEnumerable eller IEnumerator.
3) Du kan ikke bruge dem i, ref eller ud søgeord med udbytte.
4) Yderligere nøgleord kan ikke bruges med Lambda-udtryk eller anonyme metoder.
5) En opgørelse om udbytte kan ikke være inde i en try-catch-blok. Det kan være inde i en try-endelig blok.
6) En udbytteopgørelse kan ikke være inde i en try-endelig blok. Det kan være inde i en try-catch-blok.

Fordele

Udbyttesøgeordet skaber behov for at oprette midlertidige samlinger. Du behøver ikke oprette midlertidige samlinger for at gemme dataene, før de returneres fra metoden. Fremgangsmåden for udførelsen af ​​metoden bevares og behøver således ikke eksplicit lagres i koden.

Konklusion - Udbytte af nøgleord i C #

Vi lærte af denne artikel, at hvordan man leverer nøgleord er et meget nyttigt nøgleord i C #. Det hjælper med at kode komplekse problemer med så få linjer som muligt og gør også koden let at forstå. Dette var en avanceret artikel om C # rejsen. Det anbefales at prøve og bruge nøgleordet i din kode, så du får en praktisk praksis.

Anbefalede artikler

Dette er en guide til Yield Keywords i C #. Her drøfter vi Sådan leveres søgeordsværker i C # med eksempler, fordele og regler. Du kan også se på den følgende artikel for at lære mere -

  1. Overstyring i C #
  2. Navneområder i C #
  3. Pegere i C #
  4. Destructor i C #
  5. PHP-nøgleord
  6. Iterator i Java
  7. Arbejde og top 3 enummetoder i C #
  8. Fibonacci-serien i JavaScript med eksempler
  9. Komplet guide til Destructor i PHP

Kategori: