yield कीवर्ड एक कलेक्शन पर कस्टम स्टेटफुल इटरेशन करने में मदद करता है। अर्थात जब हम yield कीवर्ड का उपयोग करते हैं तो कंट्रोल कॉलर फंक्शन से सोर्स और इसके विपरीत आगे-पीछे मूव करता है।
उदाहरण
using System;
using System.Collections.Generic;
namespace DemoApplication
{
class Program
{
static List numbersList = new List { 1, 2, 3, 4, 5 };
public static void Main()
{
foreach (int i in RunningTotal())
{
Console.WriteLine(i);
}
Console.ReadLine();
}
public static IEnumerable RunningTotal()
{
int runningTotal = 0;
foreach (int i in numbersList)
{
runningTotal += i;
yield return (runningTotal);
}
}
}
}
आउटपुट
1
3
6
10
15
उपरोक्त उदाहरण में, मेन मेथड के फोरिच में हम रनिंग टोटल के नंबर्स लिस्ट के माध्यम से लूप कर रहे हैं। इसलिए जब भी yield return कहा जाता है तो कंट्रोल मेन मेथड फोरिच लूप पर वापस जाता है और मान प्रिंट करता है। एक बार मान प्रिंट हो जाने के बाद कंट्रोल फिर से रनिंग टोटल के फोरिच पर जाता है। एक बात जो ध्यान देने योग्य है वह यह है कि पिछला मान भी संरक्षित रहता है। तो सरल शब्दों में, yield कीवर्ड प्रभावी रूप से कलेक्शन आइटम्स पर एक लेज़ी एन्यूमरेशन बनाता है जो बहुत अधिक कुशल हो सकता है।