C# yield keyword (With Examples) (2024)

The yield keyword performs custom iteration over a collection like list, array, etc.

Two Forms of yield Keyword

The yield keyword is used in two forms:

  • yield return - returns an expression at each iteration
  • yield break - terminates the iteration

yield return in an Iterator

The yield keyword is used in an iterator as:

yield return <expression>; 

We use yield return inside an iterator as:

using System;using System.Collections.Generic;class Program{ // define an iterator method static IEnumerable<int> getNumber() { // create a list of integers List<int> myList = new List<int> { -1, -4, 3, 5 }; foreach (var num in myList) { // returns positive number from myList 

if (num >= 0) { yield return num; // location of the code is preserved // so on the next iteration getNumber() is executed from here Console.WriteLine("...."); }

} } static void Main() { // display return values of getNumber() foreach (var items in getNumber()) { Console.WriteLine(items); } }}

Output

3....5....

In the above example, we have created an iterator method getNumber() inside which we have used yield return.

Here, when getNumber() is called from foreach of Main(), the code inside getNumber() is executed until it reaches yield return.

When it reaches yield return, the current location of the code is preserved and the control goes back to the caller(i.e. foreach loop) and 3 is printed.

In the next iteration of foreach, the getNumber() method is called again. This time, getNumber() is executed from the preserved location of the code. This means,

Console.WriteLine("....");

gets executed and getNumber() resumes until it encounters another yield return and the same process continues till iterating over myList is completed.

Let's discuss the working of the above program with the help of an image.

Working of yield return

C# yield keyword (With Examples) (1)

1. foreach calls getNumber() - At first, the code inside the Main() function gets executed. Inside Main(), we have created a foreach loop that calls getNumber() method.

2. Inside getNumber(), myList is created.

3. Then, the foreach loop inside getNumber() starts iterating over myList. Notice the code,

if (num >= 0){ yield return num; // location of the code is preserved // so on the next iteration getNumber() is executed from here Console.WriteLine("....");}

When num = 3, num >= 0 returns True and yield return is encountered. Two operations occur:

  • pauses getNumber() and preserves the current location of the code
  • control goes back to the foreach loop (caller)

4. Control goes back to the caller - Here, the returned value 3 is printed and the next iteration of foreach begins.

In the next iteration, the getNumber() method is called again. In this call, getNumber() is resumed from the preserved location.

This means Console.WriteLine("...."); gets executed.

Now, in if block, num = 5 so num >= 0 is True. And again we encounter yield return.

5. Again, control goes back to the caller (inside foreach). Here, 5 is printed and foreach calls getNumber() in the next iteration.

The method resumes from the preserved location and prints ..... Since there are no other elements left in myList, iteration is stopped.

Frequently Asked Question

Why use yield keyword?

We have to create a temporary collection if we do not use yield return. For example,

using System;using System.Collections.Generic;class Program{ // define an iterator method static IEnumerable<int> getEven() { // create a list of integers List<int> myList = new List<int>() { 1, 2, 3, 4, 5 };

// create an empty temporary list List<int> tempList = new List<int>();

// iterate through myList foreach (var i in myList) { if (i % 2 == 0) { // adds i to temporary list tempList.Add(i); } } return tempList; } static void Main() { // display return values of getEven() foreach (var items in getEven()) { Console.WriteLine(items); } }}

Output

24

Here, we have created a temporary list tempList that stores the even numbers present inside myList.

Creating a temporary list slows down the computation and requires more memory when we are executing a large number of values.

yield break

The yield break ends an iterator ( list, array, etc) block. Let's take an example to understand it clearly.

using System;using System.Collections.Generic;class Program{ // define an iterator method static IEnumerable<string> getString() { // create a list of strings List<string> myList = new List<string> { "Sun", "Mon", "Tue" }; foreach (var day in myList) { if (day == "Mon") {

// terminates the iterator block after encountering "Mon" yield break;

} yield return day; } } static void Main() { // display return values of getString() foreach (var items in getString()) { Console.WriteLine(items); } }}

Output

Sun

Here inside the getString() method, notice

foreach (var day in myList){

if (day == "Mon") { // terminates the iterator block after encountering "Mon" yield break; }

yield return day;}

Here,

  • "Sun"=="Mon" is False so if block is not executed. Hence, the program executes yield return day and returns "Sun" to getString().
  • "Mon" == "Mon is True so if block is executed. Here, yield break is encountered and it ends the iterator block returning nothing.

Basically, if yield break is encountered, it indicates there are no more elements left in the collection.

Note: The yield break is different from break statement because break statement terminates the closest loop in normal method and yield break terminates the iterator method and transfers the control of the program to the caller.

yield break works just like return statement that returns nothing.

C# yield keyword (With Examples) (2024)
Top Articles
10 Powerful Bible Verses On Financial Breakthrough - Piggyvest Blog
Best Personal Loans With No Credit Check Of 2024
Drury Inn & Suites Bowling Green
Methstreams Boxing Stream
Calamity Hallowed Ore
Savage X Fenty Wiki
Cape Cod | P Town beach
Keurig Refillable Pods Walmart
Washington, D.C. - Capital, Founding, Monumental
6001 Canadian Ct Orlando Fl
Fairy Liquid Near Me
This Modern World Daily Kos
800-695-2780
Download Center | Habasit
Aucklanders brace for gales, hail, cold temperatures, possible blackouts; snow falls in Chch
Allentown Craigslist Heavy Equipment
Music Go Round Music Store
Encore Atlanta Cheer Competition
Japanese Mushrooms: 10 Popular Varieties and Simple Recipes - Japan Travel Guide MATCHA
Knock At The Cabin Showtimes Near Alamo Drafthouse Raleigh
Toothio Login
Walgreens 8 Mile Dequindre
Restored Republic June 16 2023
Workshops - Canadian Dam Association (CDA-ACB)
Random Bibleizer
CVS Health’s MinuteClinic Introduces New Virtual Care Offering
Wolfwalkers 123Movies
Uncovering the Enigmatic Trish Stratus: From Net Worth to Personal Life
UPC Code Lookup: Free UPC Code Lookup With Major Retailers
Springfield.craigslist
Wega Kit Filtros Fiat Cronos Argo 1.8 E-torq + Aceite 5w30 5l
Orange Pill 44 291
Gerber Federal Credit
Myhrconnect Kp
Tamilyogi Ponniyin Selvan
Synchrony Manage Account
Case Funeral Home Obituaries
ENDOCRINOLOGY-PSR in Lewes, DE for Beebe Healthcare
Hindilinks4U Bollywood Action Movies
The Angel Next Door Spoils Me Rotten Gogoanime
Discover Things To Do In Lubbock
Electric Toothbrush Feature Crossword
Shoecarnival Com Careers
Lamont Mortuary Globe Az
3 bis 4 Saison-Schlafsack - hier online kaufen bei Outwell
Academic Calendar / Academics / Home
Boyfriends Extra Chapter 6
A jovem que batizou lei após ser sequestrada por 'amigo virtual'
Premiumbukkake Tour
Argus Leader Obits Today
Definition of WMT
Craigslist Cars And Trucks For Sale By Owner Indianapolis
Latest Posts
Article information

Author: Geoffrey Lueilwitz

Last Updated:

Views: 6008

Rating: 5 / 5 (80 voted)

Reviews: 95% of readers found this page helpful

Author information

Name: Geoffrey Lueilwitz

Birthday: 1997-03-23

Address: 74183 Thomas Course, Port Micheal, OK 55446-1529

Phone: +13408645881558

Job: Global Representative

Hobby: Sailing, Vehicle restoration, Rowing, Ghost hunting, Scrapbooking, Rugby, Board sports

Introduction: My name is Geoffrey Lueilwitz, I am a zealous, encouraging, sparkling, enchanting, graceful, faithful, nice person who loves writing and wants to share my knowledge and understanding with you.