Введение в Yield Keyword в C #

Выход - это контекстное ключевое слово в C #. Контекстные ключевые слова - это те ключевые слова в C #, которые не зарезервированы для всей программы. Скорее, они являются зарезервированными ключевыми словами для определенных частей программы, где ключевое слово может быть соответствующим образом использовано. Эти ключевые слова могут использоваться в качестве допустимых идентификаторов везде, где их релевантность не передает компилятору никакого особого значения.

Ключевое слово yield указывает, что метод или метод доступа, содержащий ключевое слово, является методом / средством доступа итератора. Метод итератор / метод доступа - это метод, который не возвращает ни одного значения. Скорее, он вызывается в итерациях и возвращает разные значения в каждой итерации.

Синтаксис

Синтаксис ключевого слова yield довольно прост. Вам просто нужно указать ключевое слово перед оператором возврата метода или метода доступа.

yield return ;

ИЛИ

yield break;

Это две реализации ключевого слова. При использовании с оператором return ключевое слово yield возвращает следующее значение, вычисленное из выражения, до тех пор, пока не будет выполнено условие выхода из выражения. При использовании с ключевым словом break ключевое слово yield прерывает итерацию, и выполнение программы происходит из метода / средства доступа.

Как работает Yield Keyword в C #?

  1. Итак, как работает ключевое слово word в C #? Какова внутренняя реализация ключевого слова в компиляторе C #? Давай разберемся Метод, содержащий ключевое слово yield, может использоваться циклом итератора, таким как foreach или запрос LINQ. Каждая итерация цикла вызывает метод. Код в методе выполняется до тех пор, пока не встретятся операторы yield return или yield break.
  2. Текущая позиция выполнения в методе сохраняется, и следующая итерация продолжается с того места, где она остановилась на предыдущей итерации.
  3. Это было просто, не так ли? Давайте начнем с технической реализации того же. Метод, содержащий ключевое слово yield, всегда должен возвращать IEnumerable или IEnumerator. Всякий раз, когда компилятор встречает ключевое слово yield, он знает, что метод используется итератором. Когда метод вызывается, компилятор не выполняет тело метода, как обычно.
  4. Скорее он выполняет тело метода и возвращает скомпилированный набор IEnumerables в переменную-итератор. При каждом вызове метода компилятор ищет оператор yield и приостанавливает выполнение этого оператора. Следующая итерация цикла продолжает выполнение с последней приостановленной позиции. Это продолжается до момента выхода из цикла или до оператора break. Чтобы хранить информацию о состоянии после каждой итерации, компилятор создает конечный автомат.

Примеры доходности ключевого слова в C #

Давайте рассмотрим несколько примеров:

Пример № 1 - Метод

Пример ниже генерирует ряд Фибоначчи, используя ключевое слово yield.

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

Пример № 2 - Accessor

В следующем примере используется ключевое слово yield с аксессором get.

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

Пример № 3 - разрыв доходности

В следующем примере демонстрируется использование оператора yield break. Итерация заканчивается, как только номер в серии найден или достигнут максимальный предел поиска.

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

Если мы изменим elementToFind 1234, результат будет -

правила

1) Каждый элемент должен быть возвращен по одному с использованием оператора yield return.
2) Тип возвращаемого значения должен быть IEnumerable или IEnumerator.
3) Вы не можете использовать это в, ref или out ключевые слова с доходностью.
4) Ключевое слово Yield нельзя использовать с лямбда-выражениями или анонимными методами.
5) Оператор yield return не может быть внутри блока try-catch. Это может быть внутри блока try-finally.
6) Оператор yield break не может быть внутри блока try-finally. Это может быть внутри блока try-catch.

преимущества

Ключевое слово yield избавляет от необходимости создавать временные коллекции. Вам не нужно создавать временные коллекции для хранения данных перед их возвратом из метода. Кроме того, состояние выполнения метода сохраняется и, таким образом, не должно быть явно сохранено в коде.

Вывод - выход ключевого слова в C #

Из этой статьи мы узнали, что метод определения ключевого слова является очень полезным ключевым словом в C #. Он помогает кодировать сложные проблемы с как можно меньшим количеством строк, а также облегчает понимание кода. Это была статья продвинутого уровня о путешествии на C #. Рекомендуется использовать ключевое слово в своем коде, чтобы вы могли практиковаться.

Рекомендуемые статьи

Это руководство по выходу ключевого слова в C #. Здесь мы обсудим, как привести ключевые слова работает в C # с примерами, преимуществами и правилами. Вы также можете посмотреть следующую статью, чтобы узнать больше -

  1. Переопределение в C #
  2. Пространства имен в C #
  3. Указатели в C #
  4. Деструктор в C #
  5. Ключевые слова PHP
  6. Итератор в Java
  7. Рабочие и лучшие 3 метода перечисления в C #
  8. Ряд Фибоначчи в JavaScript с примерами
  9. Полное руководство по деструктору в PHP