Metode Iterator dengan yield return
Hasilkan urutan satu elemen setiap kali.
Metode Iterator dengan yield return adalah pelajaran C# Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C# Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C# Academy mencakup 4 pelajaran total.
Apa Itu Metode Iterator
Sebuah metode iterator menghasilkan urutan nilai satu per satu menggunakan yield return. Kompiler mengubahnya menjadi mesin keadaan, sehingga Anda tidak perlu membuat dan mengelola daftar sendiri.
yield return Pertama Anda
Setiap yield return menyerahkan satu nilai kepada pemanggil dan menjeda metode. Eksekusi dilanjutkan tepat setelah pernyataan tersebut pada iterasi berikutnya.
using System;
using System.Collections.Generic;
public class Program
{
static IEnumerable<int> FirstThree()
{
yield return 1;
yield return 2;
yield return 3;
}
public static void Main()
{
foreach (var n in FirstThree())
Console.WriteLine(n);
}
}yield return di Dalam Perulangan
Sebagian besar iterator menghasilkan nilai dari dalam perulangan. Di sini kita menghasilkan bilangan genap pertama sebanyak count tanpa pernah mengalokasikan koleksi.
using System;
using System.Collections.Generic;
public class Program
{
static IEnumerable<int> Evens(int count)
{
for (int i = 0; i < count; i++)
yield return i * 2;
}
public static void Main()
{
foreach (var n in Evens(5))
Console.WriteLine(n);
}
}Metode Mengembalikan IEnumerable
Metode iterator harus mengembalikan IEnumerable<T> atau IEnumerator<T>, atau versi yang tidak generik. Anda tidak pernah menulis return dengan nilai; Anda hanya menggunakan yield return.
using System;
using System.Collections.Generic;
public class Program
{
static IEnumerable<string> Greetings()
{
yield return "hello";
yield return "hi";
yield return "hey";
}
public static void Main()
{
foreach (var g in Greetings())
Console.WriteLine(g);
}
}Eksekusi Dijeda dan Dilanjutkan
Keadaan di antara setiap hasil dikekalkan secara otomatis. Variabel lokal mempertahankan nilainya selama jeda, sehingga menghasilkan jumlah berjalan menjadi sangat mudah.
using System;
using System.Collections.Generic;
public class Program
{
static IEnumerable<int> RunningTotal(IEnumerable<int> nums)
{
int total = 0;
foreach (var n in nums)
{
total += n;
yield return total;
}
}
public static void Main()
{
foreach (var t in RunningTotal(new[] { 1, 2, 3, 4 }))
Console.WriteLine(t);
}
}Menghasilkan Urutan Tak Terbatas
Karena nilai dihasilkan sesuai permintaan, iterator dapat menjelaskan urutan tak terbatas dengan aman. Pemanggil menentukan kapan harus berhenti mengambil nilai.
using System;
using System.Collections.Generic;
public class Program
{
static IEnumerable<int> Naturals()
{
int i = 1;
while (true) yield return i++;
}
public static void Main()
{
int taken = 0;
foreach (var n in Naturals())
{
Console.WriteLine(n);
if (++taken == 5) break;
}
}
}Mengubah Urutan Masukan
Iterator sangat baik untuk membangun alur pemrosesan: membaca elemen dari satu urutan, mengubahnya, lalu menghasilkan hasilnya secara malas.
using System;
using System.Collections.Generic;
public class Program
{
static IEnumerable<string> Labelled(IEnumerable<int> nums)
{
foreach (var n in nums)
yield return "item-" + n;
}
public static void Main()
{
foreach (var s in Labelled(new[] { 10, 20, 30 }))
Console.WriteLine(s);
}
}Memfilter dengan Iterator
Untuk memfilter, cukup hasilkan hanya elemen yang Anda inginkan. Elemen yang dilewati tidak pernah dihasilkan, sehingga kode di bagian hilir tidak pernah melihatnya.
using System;
using System.Collections.Generic;
public class Program
{
static IEnumerable<int> OnlyPositive(IEnumerable<int> nums)
{
foreach (var n in nums)
if (n > 0) yield return n;
}
public static void Main()
{
foreach (var n in OnlyPositive(new[] { -2, 5, -1, 8 }))
Console.WriteLine(n);
}
}Kompiler Membangun Mesin Keadaan
Di balik layar, kompiler menulis ulang iterator Anda menjadi kelas yang mengimplementasikan IEnumerator<T>, dengan melacak bidang keadaan tersembunyi dan nilai Current. Semua mekanisme tersebut Anda dapatkan secara otomatis.
using System;
using System.Collections.Generic;
public class Program
{
static IEnumerable<char> Letters()
{
yield return 'a';
yield return 'b';
yield return 'c';
}
public static void Main()
{
IEnumerator<char> e = Letters().GetEnumerator();
while (e.MoveNext())
Console.WriteLine(e.Current);
}
}Mengomposisikan Beberapa Iterator
Iterator dapat dirangkai secara alami karena masing-masing mengembalikan IEnumerable<T>. Masukkan keluaran satu iterator ke iterator berikutnya untuk membangun alur pemrosesan yang mudah dibaca.
using System;
using System.Collections.Generic;
public class Program
{
static IEnumerable<int> Range(int start, int count)
{
for (int i = 0; i < count; i++) yield return start + i;
}
static IEnumerable<int> Squares(IEnumerable<int> nums)
{
foreach (var n in nums) yield return n * n;
}
public static void Main()
{
foreach (var n in Squares(Range(1, 4)))
Console.WriteLine(n);
}
}Coba Sendiri
Tulis iterator yang mengelompokkan urutan masukan ke dalam bagian-bagian berukuran tetap. Iterator tersebut menghasilkan daftar sesuai permintaan dan menunjukkan betapa banyak logika yang dapat dimuat dalam satu iterator yang rapi.
using System;
using System.Collections.Generic;
public class Program
{
static IEnumerable<List<int>> Batch(IEnumerable<int> source, int size)
{
var bucket = new List<int>();
foreach (var n in source)
{
bucket.Add(n);
if (bucket.Count == size) { yield return bucket; bucket = new List<int>(); }
}
if (bucket.Count > 0) yield return bucket;
}
public static void Main()
{
foreach (var group in Batch(new[] { 1, 2, 3, 4, 5 }, 2))
Console.WriteLine(string.Join(",", group));
}
}Pemeriksaan Singkat
Ingat kembali cara kerja metode iterator.
Ringkasan
Metode iterator menggunakan yield return untuk menghasilkan urutan sesuai permintaan.
- Metode tersebut mengembalikan
IEnumerable<T>atauIEnumerator<T>. - Setiap
yield returnmenghasilkan satu nilai dan menjeda eksekusi sambil mempertahankan keadaan lokal. - Metode tersebut dapat menjelaskan urutan tak terbatas dengan aman.
- Kompiler membuat mesin keadaan untuk Anda.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Metode Iterator dengan yield return” gratis?
Ya — teks lengkap “Metode Iterator dengan yield return” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C# Academy, upgrade ke CoddyKit PRO. Kursus C# Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Metode Iterator dengan yield return”?
Hasilkan urutan satu elemen setiap kali. Kamu berlatih C# Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai C# Academy?
Tidak diperlukan pengalaman sebelumnya. C# Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “Metode Iterator dengan yield return” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran C# Academy ini?
Ya. Setiap pelajaran C# Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Metode Iterator dengan yield return
- yield break dan Penghentian Dini
- Semantik Evaluasi Malas
- Enumerable Kustom