Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Kata Kunci C# `menghasilkan` Mendayakan Lelaran Cekap Terhadap Koleksi?

Bagaimanakah Kata Kunci C# `menghasilkan` Mendayakan Lelaran Cekap Terhadap Koleksi?

Susan Sarandon
Susan Sarandonasal
2025-01-27 17:46:13653semak imbas

How Does the C# `yield` Keyword Enable Efficient Iteration Over Collections?

c# kata kunci: mengoptimumkan pengulangan koleksi yield

kata kunci C#

, yang diperkenalkan dalam C# 2.0, menawarkan mekanisme yang kuat untuk mewujudkan pengatur yang cekap ke atas koleksi. Ini amat relevan apabila berurusan dengan dataset atau senario yang besar di mana hanya mendedahkan sebahagian daripada koleksi yang diperlukan. yield

Fungsi yield

Membolehkan kaedah untuk mengembalikan objek

. Antara muka ini mewakili urutan unsur -unsur yang boleh diulang dengan menggunakan gelung yield. Secara kritis, IEnumerable tidak memerlukan keseluruhan koleksi dimuatkan ke dalam memori sekaligus. foreach yield Sebaliknya, apabila gelung

melelehkan kaedah berasaskan

, kaedah hanya dilaksanakan sehingga ia menemui pernyataan foreach. Ia kemudian mengembalikan nilai yang dihasilkan dan menangguhkan pelaksanaannya. Kaedah ini meneruskan pelaksanaan hanya apabila elemen seterusnya diminta dalam lelaran. Ini pada dasarnya adalah mesin negeri yang menjana nilai atas permintaan. yield yield return

Contoh ilustrasi

Pertimbangkan elemen penapisan kaedah dari senarai yang lebih besar:

di sini,
<code class="language-csharp">IEnumerable<object> FilteredList(IList<object> fullList, IList<object> partialList)
{
    foreach (object item in fullList)
    {
        if (partialList.Contains(item))
            yield return item;
    }
}</code>
hanya mengembalikan unsur -unsur yang ada dalam kedua -dua

dan FilteredList. Ia memproses fullList satu elemen pada satu masa, hanya menghasilkan mereka yang memenuhi syarat. Ini mengelakkan mencipta senarai baru, berpotensi besar, ditapis dalam ingatan. partialList fullList

Aplikasi praktikal

Kata kunci

mendapati penggunaan yang luas dalam:

yield

  • iterators tersuai:

    Membuat Iterator untuk struktur data tersuai atau algoritma tanpa overhead pra-populasi koleksi.

  • Pengambilan data yang cekap:

    Mendapatkan data dari pangkalan data atau sumber luaran yang lain secara bertahap, mengurangkan penggunaan memori dan meningkatkan prestasi. Pertimbangkan contoh membaca ini dari pangkalan data:

Pendekatan ini mengambil dan memproses baris pangkalan data satu demi satu, jauh lebih efisien daripada memuatkan keseluruhan hasil yang ditetapkan ke dalam ingatan.
<code class="language-csharp">public IEnumerable<T> ReadData<T>(string query, Func<IDataReader, T> mapper)
{
    using (var reader = ExecuteQuery(query))
    {
        while (reader.Read())
        {
            yield return mapper(reader);
        }
    }
}</code>

Dengan memanfaatkan kata kunci

, pemaju boleh membuat penyelesaian yang elegan dan cekap untuk melelehkan koleksi, terutamanya apabila berurusan dengan data yang besar atau dinamik.

Atas ialah kandungan terperinci Bagaimanakah Kata Kunci C# `menghasilkan` Mendayakan Lelaran Cekap Terhadap Koleksi?. 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