Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah `IEnumerable` dan `IEnumerator` membolehkan lelaran yang cekap dalam C#?

Bagaimanakah `IEnumerable` dan `IEnumerator` membolehkan lelaran yang cekap dalam C#?

Patricia Arquette
Lepaskan: 2025-01-09 12:33:40
asal
989 orang telah melayarinya

How do `IEnumerable` and `IEnumerator` enable efficient iteration in C#?

Pemahaman mendalam tentang IEnumerable dan IEnumerator dalam C#: alat yang berkuasa untuk lelaran yang cekap

Dalam pembangunan perisian, lelaran koleksi objek yang cekap adalah penting. Rangka kerja .NET menyediakan dua antara muka utama untuk ini: IEnumerable dan IEnumerator.

IEnumerableAntara Muka

IEnumerableAntara muka mewakili koleksi objek. Ia mentakrifkan satu kaedah GetEnumerator() yang mengembalikan objek IEnumerator. Mana-mana kelas yang membenarkan lelaran elemennya boleh melaksanakan antara muka ini.

IEnumeratorAntara Muka

Antara muka

IEnumerator mewakili enumerator, iaitu objek yang boleh digunakan untuk lelaran pada koleksi objek. Ia mentakrifkan dua kaedah: MoveNext() dan Current(). MoveNext() Majukan enumerator ke elemen seterusnya dalam koleksi dan mengembalikan nilai Boolean yang menunjukkan sama ada iterator telah mencapai penghujung koleksi. Current()Mengembalikan elemen semasa dalam koleksi.

Penggunaan IEnumerable dan foreach pernyataan

IEnumerable biasanya digunakan bersama dengan pernyataan foreach dalam C#. Pernyataan foreach menyediakan cara ringkas dan mudah untuk mengulang koleksi objek. Pengkompil secara automatik memanggil kaedah GetEnumerator() objek koleksi dan menggunakan objek IEnumerator yang terhasil untuk mengulangi elemennya.

Mengapa menggunakan IEnumerable dan IEnumerator?

Kecekapan: IEnumerable dan IEnumerator membenarkan lelaran yang cekap dengan mengelak memuatkan keseluruhan koleksi ke dalam memori. Mereka menyediakan mekanisme untuk mengakses elemen koleksi satu demi satu, dengan itu mengurangkan overhed memori dan meningkatkan prestasi.

Kebolehlanjutan: IEnumerable dan IEnumerator ialah antara muka standard dan mana-mana kelas boleh melaksanakannya. Ini membolehkan pembangun membuat kelas tersuai yang boleh diulang dengan mudah dengan cara yang konsisten tanpa mengira pelaksanaan dalaman mereka.

Contoh penggunaan

Pertimbangkan contoh berikut:

<code class="language-csharp">using System;
using System.Collections.Generic;

public class MyCollection : IEnumerable<int>
{
    private List<int> _data = new List<int>();

    public IEnumerator<int> GetEnumerator()
    {
        foreach (int item in _data)
        {
            yield return item;
        }
    }

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

    public void Add(int value)
    {
        _data.Add(value);
    }
}

public class Example
{
    public static void Main(string[] args)
    {
        MyCollection myCollection = new MyCollection();
        myCollection.Add(1);
        myCollection.Add(2);
        myCollection.Add(3);

        foreach (int item in myCollection)
        {
            Console.WriteLine(item);
        }
    }
}</code>
Salin selepas log masuk

Dalam contoh ini, kelas MyCollection melaksanakan IEnumerable<int> dan mentakrifkan enumerator tersuai untuk mengulangi elemennya. Pernyataan foreach kemudiannya boleh mengulangi koleksi dan mencetak elemen ke konsol.

Atas ialah kandungan terperinci Bagaimanakah `IEnumerable` dan `IEnumerator` membolehkan lelaran yang cekap dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan