Introduktion till nyckelord i C #

Yield är ett kontextuellt nyckelord i C #. Kontextuella nyckelord är de nyckelord i C # som inte är reserverade för hela programmet. Snarare är de reserverade nyckelord för vissa delar av programmet där nyckelordet kan användas relevant. Dessa nyckelord kan användas som giltiga identifierare varhelst deras relevans inte ger någon speciell betydelse till kompilatorn.

Utbytesnyckelordet indikerar att metoden eller accessorn som innehåller nyckelordet är en iteratormetod / accessor. En iteratormetod / accessor är en som inte returnerar ett enda värde. Snarare kallas det för iterationer och returnerar olika värden i varje iteration.

Syntax

Syntaxen för nyckelordet är ganska enkelt. Du behöver helt enkelt ange nyckelordet innan metodens eller accessorens returrätt.

yield return ;

ELLER

yield break;

Det här är de två implementeringarna av nyckelordet. När det används med ett returräkning returnerar nyckelordet nästa värde som beräknas från uttrycket tills uttryckets utgångsvillkor är uppfyllda. När det används med break-nyckelordet bryter nyckelordet iterationen och programkörningen kommer ut ur metoden / accessorn.

Hur fungerar Yield Keywords i C #?

  1. Så hur fungerar nyckelordet i C #? Vad är den interna implementeringen av nyckelordet i C # -kompileraren? Låt oss förstå. Metoden som innehåller avkastningssökordet kan konsumeras av en iteratorslinga, t.ex. förhand eller LINQ-fråga. Varje iteration av slingan ringer till metoden. Koden i metoden körs tills ett avkastningsavkastnings- eller avkastningsavbrott har uppstått.
  2. Den aktuella positionen för exekveringen i metoden bibehålls och nästa iteration fortsätter där den slutade i den föregående iterationen.
  3. Det här var enkelt, eller hur? Låt oss komma in på den tekniska implementeringen av samma. Metoden som innehåller nyckelordet måste alltid returnera en IEnumerable eller IEnumerator. När kompilatorn stöter på nyckelordet, vet den att metoden konsumeras av en iterator. När metoden kallas kör inte kompilatorn metodkroppen som den normalt gör.
  4. Snarare kör den metodkroppen och returnerar en sammanställd uppsättning IEnumerables till den konsumera iteratorvariabeln. Vid varje samtal i metoden letar kompilatorn efter ett avkastningsförklaring och pausar exekveringen vid det uttalandet. Nästa iteration av slingan fortsätter exekveringen från den senast pausade platsen. Detta fortsätter tills utgången av slingan eller ett utbytesavbrott. För att lagra tillståndsinformationen efter varje iteration skapar kompilatorn en tillståndsmaskin.

Exempel på nyckelord i C #

Låt oss överväga några exempel:

Exempel 1 - Metod

Exemplet nedan genererar Fibonacci-serien med hjälp av avkastningssökordet.

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

Exempel 2 - Tillbehör

Följande exempel använder avkastningssökordet 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; )
)
)

Exempel 3 - avkastningsavbrott

Följande exempel visar användningen av utbytesavbrottet. Iterationen avslutas så snart ett nummer i serien hittas eller den maximala sökgränsen nås.

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

Om vi ​​ändrar elementToFind 1234 kommer utgången att vara -

regler

1) Varje element måste returneras en åt gången med hjälp av avkastningsrapporten.
2) Returtypen måste vara en IEnumerable eller IEnumerator.
3) Du kan inte använda det i, ref eller ut sökord med avkastning.
4) Nyckelord kan inte användas med Lambda-uttryck eller anonyma metoder.
5) Ett uttalande om avkastning på avkastning kan inte finnas i ett try-catch-block. Det kan vara inuti ett test-slutblock.
6) Ett uttalat avkastningsavbrott kan inte vara inne i ett slutligt block. Det kan vara inne i ett try-catch-block.

fördelar

Avkastningsnyckelordet sparar behovet av att skapa tillfälliga samlingar. Du behöver inte skapa tillfälliga samlingar för att lagra data innan de returneras från metoden. Dessutom behålls metodens exekveringstillstånd och behöver därför inte lagras uttryckligen i koden.

Slutsats - Utbyte av nyckelord i C #

Vi lärde oss av den här artikeln att hur man ger nyckelord är ett mycket användbart nyckelord i C #. Det hjälper till att koda komplexa problem med så få rader som möjligt och gör också koden lätt att förstå. Detta var en avancerad artikel på C # -resan. Det rekommenderas att du försöker använda nyckelordet i din kod så att du får lite praktik.

Rekommenderade artiklar

Detta är en guide till Yield Keywords i C #. Här diskuterar vi hur man ger nyckelord i C # med exempel, fördelar och regler. Du kan också titta på följande artikel för att lära dig mer -

  1. Övergripande i C #
  2. Namnytor i C #
  3. Pekare i C #
  4. Destruktor i C #
  5. PHP-nyckelord
  6. Iterator i Java
  7. Working and Top 3 Enum Methods in C #
  8. Fibonacci-serien i JavaScript med exempel
  9. Komplett guide till Destructor i PHP

Kategori: