คีย์เวิร์ด 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
ในตัวอย่างข้างต้น ในแต่ละวิธีหลัก เราจะวนซ้ำผ่านรายการตัวเลขของยอดรวมที่กำลังทำงานอยู่ ดังนั้นเมื่อใดก็ตามที่มีการเรียกผลตอบแทนกลับมา ตัวควบคุมจะกลับไปที่วิธีการหลักสำหรับแต่ละลูปและพิมพ์ค่า หลังจากพิมพ์ค่าแล้ว ตัวควบคุมจะไปที่ยอดรวมการทำงานแต่ละครั้งอีกครั้ง สิ่งหนึ่งที่ต้องสังเกตที่นี่คือค่าก่อนหน้านั้นยังถูกรักษาไว้ พูดง่ายๆ ก็คือ คีย์เวิร์ดของผลตอบแทนจะสร้างการแจงนับแบบเฉื่อยเหนือรายการคอลเลกชั่นที่มีประสิทธิภาพมากกว่ามาก