ใน C # คุณสามารถสร้างวิธีการที่มีประเภทผลตอบแทนIEnumerable<T>
และการใช้yield return
และyield break
เพื่อควบคุมการไหล นี่คือตัวอย่างง่ายๆที่ใช้ตัวควบคุมทั้งสอง:
public IEnumerable<int> GetEvens(int start, int end) {
if(end < start)
yield break;
if(start & 2 != 0)
start++;
for(int i = start; i <= end; i+=2) {
yield return i;
}
}
คำถามของฉันคือทำไมมันถูกออกแบบมาเพื่อใช้คำหลักสองคำด้วยกันyield
และไม่ได้ใช้มันเหมือนดังต่อไปนี้ด้วยคำเดียวyield
"ที่ให้ค่าตอบแทน":
public IEnumerable<int> GetEvens(int start, int end) {
if(end < start)
return; // stop completely and return nothing
if(start & 2 != 0)
start++;
for(int i = start; i <= end; i+=2) {
yield i; // yield the current value.
}
}
สำหรับฉันแล้วการอ่านและทำความเข้าใจง่ายกว่า
yield x;
เป็นข้อผิดพลาดทางไวยากรณ์หรือไม่