Programmēšana

Mani divi centi par ienesīguma atslēgvārdu C #

Ienesīguma atslēgvārds, kas pirmo reizi tika ieviests C # 2.0, T atgriež objektu, kas ievieš IEnumerable saskarni. Interfeiss IEnumerable atklāj IEnumerator, kuru var atkārtot ne-vispārīgai kolekcijai, izmantojot foreach cilpu C #. Jūs varat izmantot ienesīguma atslēgvārdu, lai norādītu, ka metode vai get accessor, kurā tā izmantota, ir iterators.

Ienesīguma atslēgvārdu var izmantot divos veidos: izmantojot "ienesīguma atdevi" un "ienesīguma pārtraukumu". Abu sintakse ir parādīta zemāk.

ienesīguma atdeve;

ienesīguma pārtraukums;

Kāpēc man vajadzētu izmantot ienesīguma atslēgvārdu?

Ienesīguma atslēgvārds var veikt iterācijas pilnu atkārtošanas nepieciešamību izveidot pagaidu kolekciju. Citiem vārdiem sakot, izmantojot iteratora priekšrakstu "ienesīguma atgriešanās", jums nav jāizveido pagaidu kolekcija datu glabāšanai pirms to atgriešanas. Jūs varat izmantot ienesīguma atdeves priekšraksta priekšrocības, lai katru kolekcijas elementu atgrieztu pa vienam, un "ienesīguma atdeves" paziņojumu varat izmantot kopā ar iteratoriem metodē vai get piekļuvē.

Ņemiet vērā, ka vadīkla tiek atgriezta zvanītājam katru reizi, kad tiek sastādīts un izpildīts paziņojums "ienesīguma atgriešanās". Vissvarīgākais ir tas, ka ar katru šādu izsaukumu tiek saglabāta klienta stāvokļa informācija, lai izpilde varētu turpināties tūlīt pēc ienesīguma paziņojuma, kad atgriežas vadīkla.

Apskatīsim piemēru. Šis koda fragments ilustrē, kā ienesīguma atslēgvārdu var izmantot, lai atgrieztu Fibonači numuru. Metode pieņem veselu skaitli kā argumentu, kas norāda ģenerējamo Fibonači skaitļu skaitu.

static IEnumerable GenerateFibonacciNumbers (int n)

       {

par (int i = 0, j = 0, k = 1; i <n; i ++)

          {

ienesīguma atdeve j;

int temp = j + k;

j = k;

k = temp;

           }

       }

Kā parādīts iepriekš koda fragmentā, paziņojums “ienesīgums j;” atgriež Fibonači numurus pa vienam, neizejot no cilnes “par”. Citiem vārdiem sakot, valsts informācija tiek saglabāta. Lūk, kā var izsaukt metodi GenerateFibonacciNumbers.

foreach (int x vietā GenerateFibonacciNumbers (10))

   {

Console.WriteLine (x);

   }

Kā jūs varat pamanīt, nav nepieciešams izveidot starpposma sarakstu vai masīvu, lai turētu fibonacci numurus, kas jāveido un jāatgriež zvanītājam.

Ņemiet vērā, ka zem seguma ienesīguma atslēgvārds izveido štata mašīnu, lai uzturētu štata informāciju. MSDN norāda: "Kad atkārtojuma metodē tiek sasniegts ienesīguma atgriešanās paziņojums, tiek atgriezta izteiksme un saglabāta pašreizējā atrašanās vieta kodā. Izpildīšana tiek atsākta no šīs vietas nākamajā reizē, kad tiek izsaukta iteratora funkcija."

Vēl viena peļņas atslēgvārda izmantošanas priekšrocība ir tā, ka preces, kas tiek atgrieztas, tiek veidotas tikai pēc pieprasījuma. Piemēram, šāds get accessor atgriež pāra skaitļus no 1 līdz 10.

publiskais statiskais IEnumerable EvenNumbers

       {

gūt

           {

par (int i = 1; i <= 10; i ++)

               {

ja ((i% 2) == 0)

ienesīguma atdeve i;

               }

           }

       }

Jūs varat piekļūt statiskajam īpašumam EvenNumbers, lai konsoles logā parādītu pāra skaitļus no 1 līdz 10, izmantojot tālāk sniegto koda fragmentu.

foreach (int i EvenNumbers)

     {

Console.WriteLine (i);

     }

Izrādi “ienesīguma pārtraukums” var izmantot iteratorā, kad vairs nav atdodamu vērtību. "Ienesīguma pārtraukuma" paziņojums tiek izmantots, lai izbeigtu uzskaitījumu.

public IEnumerable GetData (IEnumerable items)

{

ja (null == vienumi)

ienesīguma pārtraukums;

foreach (T prece vienībās)

ienesīguma atgriešanas postenis;

}

Skatiet iepriekš minēto kodu sarakstu. Ievērojiet, kā tiek pārbaudīts, vai parametrs "items" nav derīgs. Kad iteratorā izsaucat metodi GetData () un kā parametrs ir null, vadība vienkārši atgriežas pie zvanītāja, neatgriežot nevienu vērtību.

Punkti, kas jāatceras

Strādājot ar ienesīguma atslēgvārdu, jums jāpatur prātā šie punkti:

  • Ienesīguma atgriešanās paziņojums nevar būt mēģinājuma noķeršanas blokā, lai gan tas var būt mēģinājumu beidzot blokā
  • Galīgajā blokā nevar būt ienesīguma pārtraukuma paziņojums
  • Metodes atgriešanas tipam, kur izmantots ienesīgums, jābūt IEnumerable, IEnumerable, IEnumerator vai IEnumerator
  • Metodē, kurā izmantota raža, nevar būt ref vai out parametrs
  • Anonīmās metodēs nevar izmantot apgalvojumus "ienesīguma atdeve" vai "ienesīguma pārtraukums"
  • Metodēs "nedrošs" nevar izmantot apgalvojumus "ienesīguma atdeve" vai "ienesīguma pārtraukums", t.i., metodes, kas apzīmētas ar atslēgvārdu "nedrošs", lai apzīmētu nedrošu kontekstu
$config[zx-auto] not found$config[zx-overlay] not found