คีย์เวิร์ด Yield ช่วยในการทำซ้ำ stateful แบบกำหนดเองบนคอลเล็กชัน ความหมายเมื่อเราใช้คีย์เวิร์ดให้ผล การควบคุมจะเลื่อนไปมาจากฟังก์ชันผู้โทรไปยังแหล่งที่มาและในทางกลับกัน
ตัวอย่าง
using System; using System.Collections.Generic; namespace DemoApplication { class Program { static List<int> numbersList = new List<int> { 1, 2, 3, 4, 5 }; public static void Main() { foreach(int i in RunningTotal()) { Console.WriteLine(i); } Console.ReadLine(); } public static IEnumerable<int> RunningTotal() { int runningTotal = 0; foreach(int i in numbersList) { runningTotal += i; yield return (runningTotal); } } } }
ผลลัพธ์
ผลลัพธ์ของโปรแกรมข้างต้นคือ
1 3 6 10 15
ในตัวอย่างข้างต้น ในแต่ละวิธีหลัก เราจะวนซ้ำผ่านรายการตัวเลขของยอดรวมที่กำลังทำงานอยู่ ดังนั้นเมื่อใดก็ตามที่มีการเรียกผลตอบแทนกลับมา ตัวควบคุมจะกลับไปที่วิธีการหลักสำหรับแต่ละลูปและพิมพ์ค่า หลังจากพิมพ์ค่าแล้ว ตัวควบคุมจะไปที่ยอดรวมการทำงานแต่ละครั้งอีกครั้ง สิ่งหนึ่งที่ต้องสังเกตที่นี่คือค่าก่อนหน้านั้นยังถูกรักษาไว้ พูดง่ายๆ ก็คือ คีย์เวิร์ดของผลตอบแทนจะสร้างการแจงนับแบบเฉื่อยเหนือรายการคอลเลกชั่นที่มีประสิทธิภาพมากกว่ามาก