Pemahaman mendalam tentang gelung foreach dalam C#
Gelung foreach
dalam C# ialah binaan bahasa yang berkuasa yang membolehkan pembangun mengulangi elemen koleksi dengan mudah dan cekap. Tetapi apakah sebenarnya yang perlu dipenuhi oleh kelas untuk menggunakan gelung foreach
?
Kelas boleh ulang
Mana-mana kelas yang melaksanakan antara muka IEnumerable
boleh diulang menggunakan gelung foreach
. Secara teknikal, kelas hanya perlu menyediakan kaedah MoveNext()
yang mengembalikan objek dengan kaedah Current
dan sifat GetEnumerator()
, tetapi melaksanakan IEnumerable
ialah cara paling biasa untuk menyediakan fungsi ini.
Jenis koleksi biasa
Jenis koleksi standard, seperti Collection<T>
, List<T>
dan tatasusunan (T[]), semuanya melaksanakan antara muka ICollection
atau IEnumerable
, membenarkan penggunaannya dalam gelung foreach
. Ini kerana jenis ini mewakili koleksi data yang boleh dikira.
Cara gelung foreach berfungsi
Gelung foreach (int i in obj)
serupa dengan foreach
secara kasar diterjemahkan kepada kod berikut:
<code class="language-csharp">var tmp = obj.GetEnumerator(); int i; // C# 4.0 之前 while (tmp.MoveNext()) { int i; // C# 5.0 及以后 i = tmp.Current; // 你的代码 }</code>
tmp
Pembolehubah menyimpan enumerator, yang bertanggungjawab untuk melintasi koleksi. Pada setiap lelaran, kaedah MoveNext()
memajukan enumerator ke elemen seterusnya, manakala atribut Current
mengembalikan elemen semasa (yang ditugaskan kepada pembolehubah gelung, seperti i
dalam contoh kami).
Variasi dan Keluaran
Bergantung pada pelaksanaan, pembanci mungkin menyokong antara muka IDisposable
. Jika ya, C# akan melepaskan enumerator secara automatik menggunakan corak using
apabila gelung keluar. Adalah penting untuk ambil perhatian bahawa dalam C# 5.0, pengisytiharan pembolehubah gelung (int i) telah dialihkan ke dalam gelung, yang penting jika anda merancang untuk menggunakan pembolehubah dalam kaedah tanpa nama atau ungkapan lambda.
Atas ialah kandungan terperinci Apa yang Menjadikan Kelas C# Boleh Diulang Menggunakan Gelung Foreach?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!