Dalam C # Anda dapat membangun metode dengan tipe pengembalian IEnumerable<T>
dan menggunakan yield return
dan yield break
untuk mengontrol aliran. Berikut adalah contoh sederhana yang menggunakan kedua kontrol:
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;
}
}
Pertanyaan saya adalah, mengapa awalnya dirancang untuk menggunakan dua kata kunci dengan yield
dan tidak menggunakannya seperti berikut ini dengan single yield
"menghasilkan nilai kembali":
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.
}
}
Bagi saya, ini lebih mudah dibaca dan dimengerti.
yield x;
juga kesalahan sintaksis saat itu?yield
return
, Anda bahkan tidak perlu repot memikirkan apakah itu kesalahan sintaks atau tidak. Peluang tabrakan menjadi nol.yield
makayield x;
tidak akan menjadi kesalahan sintaks, tetapi deklarasi variabel yang valid.