Utbytte nøkkelord i C # - Hvordan fungerer avkastningssøkeord i C #? - eksempler

Innholdsfortegnelse:

Anonim

Introduksjon til Yield Keyword i C #

Yield er et kontekstuelt nøkkelord i C #. Innholdsord er nøkkelord i C # som ikke er forbeholdt hele programmet. Snarere er de reservert nøkkelord for bestemte deler av programmet der nøkkelordet kan brukes relevant. Disse nøkkelordene kan brukes som gyldige identifikatorer uansett hvor deres relevans ikke gir noen spesiell betydning til kompilatoren.

Utbyttetøkkelordet indikerer at metoden eller accessoren som inneholder nøkkelordet er en iteratormetode / accessor. En iteratormetode / accessor er en som ikke returnerer en eneste verdi. Snarere heter det i iterasjoner og returnerer forskjellige verdier i hver iterasjon.

syntax

Syntaksen til avkastningssøkeordet er ganske enkelt. Du trenger ganske enkelt å spesifisere nøkkelordet før rettsuttalelsen til metoden eller tilbehøret.

yield return ;

ELLER

yield break;

Dette er de to implementeringene av nøkkelordet. Når det brukes sammen med en returerklæring, returnerer nøkkelordet den neste verdien som er beregnet fra uttrykket, til eksitensbetingelsen for uttrykket er oppfylt. Når det brukes med pauseøkkelordet, bryter avkastningsnøkkelordet iterasjonen, og programutførelse kommer ut av metoden / aksessoren.

Hvordan fungerer Yield Keyword i C #?

  1. Så hvordan fungerer søkeordordet i C #? Hva er den interne implementeringen av nøkkelordet i C # -kompilatoren? La oss forstå. Metoden som inneholder nøkkelordet for utbytte kan forbrukes av en iteratorløyfe, for eksempel foreach eller LINQ-spørring. Hver iterasjon av løkken ringer til metoden. Koden i metoden utføres til det foreligger et utsagn om avkastning eller avkastning.
  2. Den nåværende plasseringen av utførelsen i metoden beholdes, og neste iterasjon fortsetter fra der den slapp i forrige iterasjon.
  3. Dette var enkelt, ikke sant? La oss komme inn på den tekniske implementeringen av det samme. Metoden som inneholder nøkkelordet, må alltid returnere en IEnumerable eller IEnumerator. Hver gang kompilatoren møter avkastningsnøkkelordet, vet den at metoden blir brukt av en iterator. Når metoden kalles, kjører ikke kompilatoren metoden som den normalt gjør.
  4. Snarere kjører den metodekroppen og returnerer et samlet sett med IEnumerables til den konsumerende iteratorvariabelen. På hver samtale av metoden ser kompilatoren etter en avkastningserklæring og stopper utførelsen ved den uttalelsen. Neste iterasjon av løkken fortsetter utførelsen fra det siste pausede stedet. Dette fortsetter inntil utløpsbetingelsen for løkken eller en utbytte-bryter-uttalelse. For å lagre tilstandsinformasjonen etter hver iterasjon oppretter kompilatoren en tilstandsmaskin.

Eksempler på avkastningssøkeord i C #

La oss se på noen eksempler:

Eksempel 1 - Metode

Eksemplet nedenfor genererer Fibonacci-serien ved hjelp av avkastningssøkeordet.

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 - Tilbehør

Følgende eksempel bruker avkastningssøkeordet 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 - avkastningsbrudd

Følgende eksempel demonstrerer bruken av utbyttebrudduttalelsen. Iterasjonen avsluttes så snart et nummer i serien er funnet eller den maksimale søkegrensen er nådd.

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 endrer elementToFind 1234, vil utgangen være -

regler

1) Hvert element må returneres én om gangen ved bruk av avkastningsoppgaven.
2) Returtypen må være en IEnumerable eller IEnumerator.
3) Du kan ikke bruke dem i, avvise eller ut søkeord med avkastning.
4) Nøkkelord kan ikke brukes med Lambda-uttrykk eller anonyme metoder.
5) En avkastningsoppgave kan ikke være inne i en try-catch-blokk. Det kan være inne i en prøve-endelig blokk.
6) En uttalelse om avkastningsbrudd kan ikke være i en prøve-endelig blokk. Det kan være inne i en prøvefangstblokk.

Fordeler

Utbyttetøkkelordet sparer behovet for å lage midlertidige samlinger. Du trenger ikke lage midlertidige samlinger for å lagre dataene før de returneres fra metoden. Dessuten beholdes eksekveringstilstanden for metoden, og behøver derfor ikke lagres eksplisitt i koden.

Konklusjon - Utbytte nøkkelord i C #

Vi lærte fra denne artikkelen at hvordan du kan levere nøkkelord er et veldig nyttig nøkkelord i C #. Det hjelper å kode komplekse problemer med så få linjer som mulig, og gjør også koden lett å forstå. Dette var en avansert artikkel på C # -reisen. Det anbefales å prøve å bruke nøkkelordet i koden din, slik at du får litt praktisk praksis.

Anbefalte artikler

Dette er en guide til Yield Keyword i C #. Her diskuterer vi Hvordan gi søkeord fungerer i C # med eksempler, fordeler og regler. Du kan også se på følgende artikkel for å lære mer -

  1. Overriding i C #
  2. Navnearealer i C #
  3. Pekere i C #
  4. Destructor i C #
  5. PHP nøkkelord
  6. Iterator i Java
  7. Working and Top 3 Enum Methods in C #
  8. Fibonacci-serien i JavaScript med eksempler
  9. Komplett guide til Destructor i PHP