Saannon avainsana C # - Kuinka Yield-avainsana toimii C #: ssä? - esimerkit

Sisällysluettelo:

Anonim

Johdanto tuotto-avainsanalle C #: ssä

Saanto on asiayhteydessä oleva avainsana C #: ssä. Kontekstuaaliset avainsanat ovat C #: n avainsanoja, joita ei ole varattu koko ohjelmalle. Pikemminkin ne ovat varattuja avainsanoja tietyille ohjelman osille, joissa avainsana voidaan tarkoituksenmukaisesti ottaa käyttöön. Näitä avainsanoja voidaan käyttää kelvollisina tunnisteina aina, kun niiden osuvuus ei anna erityistä merkitystä kääntäjälle.

Tuotto-avainsana osoittaa, että menetelmä tai avainsanan sisältävä lisälaite on iteraattorimenetelmä / -sovellus. Iteraattorimenetelmä / lisälaite on sellainen, joka ei palauta yhtä arvoa. Pikemminkin sitä kutsutaan iteraatioina ja palauttaa eri arvot jokaisessa iteraatiossa.

Syntaksi

Tuotto-avainsanan syntaksi on melko yksinkertainen. Sinun tarvitsee vain määrittää avainsana ennen menetelmän tai käyttöliittymän palautuslausetta.

yield return ;

TAI

yield break;

Nämä ovat avainsanan kaksi toteutusta. Kun tuottoa käytetään avainsanalla paluulausekkeen kanssa, se tuottaa seuraavan lausekkeesta lasketun arvon, kunnes lausekkeen poistosuhde täyttyy. Käytettäessä tauon avainsanaa, tuoton avainsana rikkoo iteraation ja ohjelman suorittaminen tulee ulos menetelmästä / apuohjelmasta.

Kuinka Yield Keyword toimii C #: ssä?

  1. Joten miten avainsanat C #: ssä vaikuttavat? Mikä on avainsanan sisäinen toteutus C # -kokoonpanossa? Ymmärretään. Tuottoavainsanan sisältävä menetelmä voidaan kuluttaa iteraattorisilmukalla, kuten foreach tai LINQ-kysely. Jokainen silmukan iterointi kutsuu menetelmää. Menetelmässä oleva koodi suoritetaan, kunnes kohdataan tuotto- tai tuotonjako-ilmoitus.
  2. Suorituksen nykyinen sijainti menetelmässä säilytetään ja seuraava iterointi jatkuu siitä kohdasta, jossa se jäi edelliseen iteraatioon.
  3. Tämä oli yksinkertaista, eikö niin? Mennään tekniseen toteutukseen sama. Tuottoavainsanan sisältävän menetelmän on aina palautettava IEnumerable tai IEnumerator. Aina kun kääntäjä kohtaa tuotto-avainsanan, se tietää, että iteraattori käyttää menetelmää. Kun menetelmää kutsutaan, kääntäjä ei suorita menetelmän runkoa normaalisti.
  4. Pikemminkin se suorittaa menetelmän rungon ja palauttaa kootun joukon IEnumerables -kuluja iteraattorimuuttujaan. Jokaisessa menetelmän kutsussa kääntäjä etsii tuottolaskelmaa ja keskeyttää suorituksen suorittamisen kyseisessä lauseessa. Seuraava silmukan toisto jatkaa suoritusta viimeisestä keskeytetystä sijainnista. Tätä jatketaan silmukan poistosuhteeseen tai tuottokatkoselvitykseen asti. Tallentaaksesi tilatiedot jokaisen toiston jälkeen kääntäjä luo tilakoneen.

Esimerkkejä sadon avainsanasta C #

Tarkastellaan joitain esimerkkejä:

Esimerkki 1 - menetelmä

Seuraava esimerkki tuottaa Fibonacci-sarjan tuotto-avainsanan avulla.

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

Esimerkki 2 - lisälaite

Seuraava esimerkki käyttää tuotto-avainsanaa get-lisälaitteen kanssa.

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

Esimerkki 3 - tuottokatko

Seuraava esimerkki osoittaa tuottokatkolaskelman käytön. Iterointi lopetetaan heti, kun sarja sarjasta löytyy tai haun enimmäisraja on saavutettu.

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

Jos muutamme elementToFind 1234, tulosteen arvo on -

säännöt

1) Jokainen elementti on palautettava yksi kerrallaan käyttämällä tuoton palautusta.
2) Palautustyypin on oltava IEnumerable tai IEnumerator.
3) Et voi käyttää sitä avainsanojen tuottamiseen, parantamiseen tai poistamiseen.
4) Tuottoavainsanaa ei voida käyttää lambda-lausekkeiden tai nimettömien menetelmien kanssa.
5) Tuottoprosentti ei voi olla try-catch-lohkon sisällä. Se voi olla "yritä lopulta" -lohkon sisällä.
6) Tuottokatkaisulauseke ei voi olla koetulos-lohkon sisällä. Se voi olla try-catch-lohkon sisällä.

edut

Tuotto-avainsana säästää tarvetta luoda väliaikaisia ​​kokoelmia. Sinun ei tarvitse luoda väliaikaisia ​​kokoelmia tietojen tallentamiseksi ennen kuin ne palautetaan menetelmästä. Myös menetelmän suoritustila säilytetään, eikä sitä siksi tarvitse erikseen tallentaa koodiin.

Johtopäätös - Tuotto-avainsana C #: ssä

Opimme tästä artikkelista, että avainsanan tuottaminen on erittäin hyödyllinen avainsana C #: ssä. Se auttaa koodaamaan monimutkaisia ​​ongelmia mahdollisimman pienellä rivillä ja tekee koodista myös helpon ymmärtää. Tämä oli edistyneen tason artikkeli C # -matkalla. On suositeltavaa kokeilla ja käyttää avainsanaa koodissasi, jotta saat käytännön käytännön harjoittelua.

Suositellut artikkelit

Tämä on opas tuotto-avainsanaan C #: ssä. Tässä keskustellaan siitä, kuinka avainsanat saadaan toimimaan C # -mallissa esimerkkeillä, eduilla ja säännöillä. Voit myös tarkastella seuraavaa artikkelia saadaksesi lisätietoja -

  1. Ohittaminen C #: ssä
  2. Nimitilat C #: ssä
  3. Osoittimet C #
  4. Tuhoaja C #: ssä
  5. PHP-avainsanat
  6. Iterator Java
  7. Työskentely ja 3 suosituinta enumimenetelmää C #: ssä
  8. Fibonacci-sarja JavaScriptinä ja esimerkkejä
  9. Täydellinen opas tuhoojaan PHP: ssä