Programavimas

Mano du centai už pajamingumo raktinį žodį C #

Derlumo raktinis žodis, pirmą kartą įvestas C # 2.0, T grąžina objektą, įgyvendinantį „IEnumerable“ sąsają. „IEnumerable“ sąsajoje pateikiamas „IEnumerator“, kuris gali būti naudojamas pakartoti ne bendrinę kolekciją, naudojant foreach ciklą C #. Galite naudoti pajamingumo raktinį žodį, kad nurodytumėte, jog metodas arba „get accessor“, kuriame jis buvo naudojamas, yra iteratorius.

Pelningumo raktinį žodį galite naudoti dviem būdais: Naudokite teiginius „grąžos grąža“ ir „pajamingumo pertrauka“. Abiejų sintaksė parodyta žemiau.

derlingumo grąža;

derliaus pertrauka;

Kodėl turėčiau naudoti pajamingumo raktinį žodį?

Derlingumo raktinis žodis gali atlikti visą valstybės atkartojimą, be to, reikia sukurti laikiną kolekciją. Kitaip tariant, naudojant iteratoriaus teiginį „grąžos grąža“, jums nereikia sukurti laikinos kolekcijos duomenims saugoti prieš jiems grąžinant. Galite pasinaudoti grąžos grąžos teiginiu, kad grąžintumėte kiekvieną kolekcijos elementą po vieną, o „grąžos grąžos“ sakinį galite naudoti su iteratoriais metodu ar „get accessor“.

Atkreipkite dėmesį, kad valdiklis grąžinamas skambinančiajam kiekvieną kartą, kai susiduriama ir įvykdomas „grąžos grąžos“ sakinys. Svarbiausia, kad su kiekvienu tokiu skambučiu būtų išsaugota kliento būsenos informacija, kad vykdant būtų galima tęsti iškart po grąžos ataskaitos, kai grįžta kontrolė.

Pažvelkime į pavyzdį. Šis kodo fragmentas parodo, kaip pelningumo raktinį žodį galima naudoti norint grąžinti „Fibonacci“ numerį. Metodas priima sveiką skaičių kaip argumentą, kuris nurodo sugeneruojamų „Fibonacci“ skaičių.

statiniai „IEnumerable GenerateFibonacciNumbers“ (int n)

       {

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

          {

derlingumo grąža j;

int temp = j + k;

j = k;

k = temp;

           }

       }

Kaip parodyta aukščiau esančiame kodo fragmente, teiginys „grąžos grąža j;“ grąžina „Fibonači“ skaičius po vieną neišeidamas iš „už“ kilpos. Kitaip tariant, valstybės informacija yra išsaugota. Štai kaip galima vadinti „GenerateFibonacciNumbers“ metodą.

foreach (int x „GenerateFibonacciNumbers“ (10))

   {

Console.WriteLine (x);

   }

Kaip pastebite, nereikia sukurti tarpinio sąrašo ar masyvo, kad būtų galima laikyti fibonacci numerius, kuriuos reikia sugeneruoti ir grąžinti skambinančiajam.

Atkreipkite dėmesį, kad po priedanga derlingumo raktinis žodis sukuria būsenos mašiną, skirtą palaikyti būsenos informaciją. MSDN teigia: "Kai iteratoriaus metodu pasiekiama grąžos grąžos ataskaita, išraiška grąžinama ir išlaikoma dabartinė kodo vieta. Vykdymas pradedamas iš tos vietos, kai kitą kartą iškviečiama iteratoriaus funkcija."

Kitas pelningumo raktinio žodžio naudojimo pranašumas yra tas, kad grąžinamos prekės yra kuriamos tik pagal poreikį. Pavyzdžiui, šis „get accessor“ pateikia lyginius skaičius nuo 1 iki 10.

public static ISuskaičiuojami lyginiai skaičiai

       {

gauti

           {

už (int i = 1; i <= 10; i ++)

               {

jei ((i% 2) == 0)

pajamingumas i;

               }

           }

       }

Galite pasiekti „EvenNumbers“ statinę ypatybę, jei norite rodyti lyginius skaičius nuo 1 iki 10 konsolės lange naudodami toliau pateiktą kodo fragmentą.

foreach (int i EvenNumbers)

     {

Console.WriteLine (i);

     }

Kai nebėra grąžintinų reikšmių, iteratoriuje galite naudoti teiginį „pajamingumo pertrauka“. Teiginys „pajamingumo pertrauka“ naudojamas baigti išvardijimą.

public IEnumerable GetData (IEnumerable items)

{

jei (null == elementai)

derliaus pertrauka;

foreach (T elementas elementuose)

grąžos grąžinimo elementas;

}

Žr. Aukščiau pateiktą kodų sąrašą. Atkreipkite dėmesį, kaip tikrinama, ar parametras „items“ yra nulinis. Kai iteratoriuje iškviečiate metodą „GetData“ (), o parametras yra „null“, valdiklis tiesiog grįžta atgal į skambinantįjį, negrąžinant jokios vertės.

Taškai, kuriuos reikia atsiminti

Dirbdami su pelningumo raktiniu žodžiu, turėtumėte nepamiršti šių dalykų:

  • Jūs negalite turėti grąžos grąžos bandymo sugauti bloke, nors jį galite įtraukti į bandymo pagaliau bloką
  • Galutiniame bloke negali būti pajamingumo lūžio teiginio
  • Metodo grąžinimo tipas, kai buvo naudojamas derlius, turėtų būti IEnumerable, IEnumerable, IEnumerator arba IEnumerator
  • Metode, kuriame buvo naudojamas derlius, negali būti ref arba out parametro
  • Anoniminiuose metoduose negalima naudoti teiginių „grąžos grąžos“ ar „pajamingumo pertraukos“
  • Negalite naudoti „nesaugių“ metodų teiginių „grąžos grąžos“ arba „pajamingumo pertraukos“, t. Y. Metodų, kurie pažymėti raktiniu žodžiu „nesaugu“, kad būtų nurodytas nesaugus kontekstas.
$config[zx-auto] not found$config[zx-overlay] not found