Rumah >pembangunan bahagian belakang >C++ >IEnumerable dan IEnumerator dalam C#: Bagaimana Mereka Mendayakan foreach Gelung dan Lelaran Tersuai?

IEnumerable dan IEnumerator dalam C#: Bagaimana Mereka Mendayakan foreach Gelung dan Lelaran Tersuai?

Patricia Arquette
Patricia Arquetteasal
2025-01-09 12:51:41671semak imbas

IEnumerable and IEnumerator in C#: How Do They Enable foreach Loops and Custom Iterators?

Pemahaman mendalam tentang IEnumerable dan IEnumerator: mekanisme teras bagi .NET iterator

Dalam pengaturcaraan .NET, melaksanakan antara muka IEnumerable ialah kunci untuk mendayakan gelung foreach. Walaupun sintaks foreach adalah ringkas dan mudah digunakan, pergantungan asasnya adalah pada antara muka IEnumerable dan IEnumerator.

Senario aplikasi IEnumerable dan IEnumerator

IEnumerable tidak digunakan untuk "menggantikan" foreach, sebaliknya, melaksanakan IEnumerable adalah prasyarat untuk menggunakan foreach. Apabila anda menulis gelung foreach, pengkompil sebenarnya menukarnya kepada satu siri panggilan kepada kaedah MoveNext dan Current IEnumerator.

Perbezaan antara IEnumerable dan IEnumerator

  • IEnumerable: mentakrifkan antara muka dengan kaedah GetEnumerator, yang mengembalikan IEnumerator.
  • IEnumerator: mentakrifkan antara muka kaedah MoveNext dan Current. MoveNext mengalihkan iterator ke item seterusnya dalam jujukan, manakala Current mengembalikan item semasa.

Mengapa kita memerlukan IEnumerable dan IEnumerator?

  • Pengulang Tersuai: Dengan melaksanakan IEnumerable pada kelas tersuai anda, anda boleh menggunakan gelung foreach untuk mengulang kelas tersebut.
  • Memahami mekanisme lelaran: IEnumerator menyediakan mekanisme peringkat rendah untuk melintasi koleksi, membolehkan anda mengawal proses traversal.
  • Koleksi Generik: Pengkompil C# menggunakan IEnumerable dan IEnumerator untuk mencipta kelas koleksi generik, seperti List dan Dictionary.
  • Pengaturcaraan Asynchronous: IEnumerator boleh digunakan bersama-sama dengan model pengaturcaraan tak segerak untuk melintasi jujukan tak segerak.

melaksanakan IEnumerable

Untuk menjadikan kelas boleh lelar, anda perlu melaksanakan antara muka IEnumerable, yang memerlukan pelaksanaan kaedah GetEnumerator yang mengembalikan IEnumerator.

Contoh

Pertimbangkan kelas objek tersuai berikut yang melaksanakan antara muka IEnumerable:

<code class="language-csharp">public class CustomCollection : IEnumerable<int>
{
    private int[] data;

    public IEnumerator<int> GetEnumerator()
    {
        return new CustomEnumerator(data);
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return this.GetEnumerator();
    }

    private class CustomEnumerator : IEnumerator<int>
    {
        // MoveNext 和 Current 方法用于遍历 data
    }
}</code>

Dengan melaksanakan IEnumerable dan menyediakan enumerator tersuai, anda kini boleh menggunakan gelung foreach untuk mengulangi kejadian CustomCollection.

Atas ialah kandungan terperinci IEnumerable dan IEnumerator dalam C#: Bagaimana Mereka Mendayakan foreach Gelung dan Lelaran Tersuai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn