0Pricing
C# Academy · Pelajaran

Pembuat Koleksi

Dukung ekspresi koleksi pada tipe kustom.

Pembuat Koleksi adalah pelajaran C# Academy gratis di CoddyKit. Ini adalah pelajaran 4 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.

Tipe Kustom dalam Ekspresi Koleksi

Ekspresi koleksi tidak terbatas pada tipe bawaan. Dengan atribut [CollectionBuilder], tipe buatan Anda sendiri dapat dibuat menggunakan sintaks [...].

Atribut CollectionBuilder

Anda menerapkan [CollectionBuilder(typeof(Factory), "Create")] pada tipe koleksi. Atribut tersebut menamai metode pabrik statis yang dipanggil kompilator untuk membuat instans.

Tanda Tangan Metode Pembangun

Metode pembangun harus berupa static dan menerima satu parameter ReadOnlySpan<T>, lalu mengembalikan tipe koleksi Anda. Kompilator meneruskan elemen sebagai rentang.

Koleksi Kustom Minimal

Berikut adalah koleksi kecil yang tidak dapat diubah dan memilih pembuatan melalui ekspresi koleksi menggunakan pembangun.

using System;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.CompilerServices;

[CollectionBuilder(typeof(IntBagBuilder), "Create")]
class IntBag : IEnumerable<int> {
    private readonly int[] items;
    public IntBag(ReadOnlySpan<int> data) => items = data.ToArray();
    public IEnumerator<int> GetEnumerator() => ((IEnumerable<int>)items).GetEnumerator();
    IEnumerator IEnumerable.GetEnumerator() => items.GetEnumerator();
}

static class IntBagBuilder {
    public static IntBag Create(ReadOnlySpan<int> data) => new IntBag(data);
}

IntBag bag = [1, 2, 3];
foreach (int n in bag) Console.Write(n + " "); // 1 2 3
Console.WriteLine();

Mengapa ReadOnlySpan

Parameter rentang memungkinkan kompilator menyerahkan elemen tanpa alokasi perantara. Pembangun Anda menyalinnya ke penyimpanan apa pun yang diperlukan.

Harus Berupa IEnumerable

Tipe koleksi harus menerapkan IEnumerable<T> (yang sesuai dengan tipe elemen rentang) agar kompilator mengetahui tipe elemen dan dapat memvalidasi penggunaannya.

Pembangun Generik

Pembangun dapat bersifat generik dan mendukung MyCollection<T>. Metode pembangun menerima ReadOnlySpan<T> dan mengembalikan MyCollection<T>.

using System;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.CompilerServices;

[CollectionBuilder(typeof(BoxBuilder), "Create")]
class Box<T> : IEnumerable<T> {
    private readonly T[] items;
    public Box(ReadOnlySpan<T> d) => items = d.ToArray();
    public IEnumerator<T> GetEnumerator() => ((IEnumerable<T>)items).GetEnumerator();
    IEnumerator IEnumerable.GetEnumerator() => items.GetEnumerator();
}

static class BoxBuilder {
    public static Box<T> Create<T>(ReadOnlySpan<T> d) => new Box<T>(d);
}

Box<string> b = ["x", "y"];
foreach (var s in b) Console.Write(s + " "); // x y
Console.WriteLine();

Manfaat bagi Koleksi yang Tidak Dapat Diubah

Pembangun memungkinkan koleksi tak dapat diubah .NET (seperti ImmutableArray<T>) mendukung ekspresi koleksi. Pembangun membuat instans yang dibekukan dari rentang tersebut.

using System;
using System.Collections.Immutable;

ImmutableArray<int> nums = [1, 2, 3];
Console.WriteLine(nums.Length); // 3

Elemen Sebar Juga Berfungsi

Setelah suatu tipe memiliki pembangun, elemen sebar otomatis dapat digunakan di dalam ekspresi koleksinya, karena kompilator tetap menghasilkan satu rentang elemen.

using System;
using System.Collections.Immutable;

ImmutableArray<int> a = [1, 2];
ImmutableArray<int> all = [..a, 3, 4];
Console.WriteLine(all.Length); // 4

Kapan Menambahkan Pembangun

Tambahkan [CollectionBuilder] saat Anda menyediakan koleksi kustom dan ingin pemanggil menikmati sintaks ringkas [...], terutama untuk wadah yang tidak dapat diubah atau yang memiliki tujuan khusus.

Menggabungkan Semuanya

Pembangun hanya terdiri dari tiga bagian: atribut, tipe IEnumerable<T>, dan metode statis Create(ReadOnlySpan<T>). Dengan ketiganya, tipe Anda menjadi tujuan ekspresi koleksi kelas utama.

Pemeriksaan Singkat

Pastikan persyaratan untuk pembangun koleksi.

Rangkuman

Anda telah mempelajari cara tipe kustom mendukung ekspresi koleksi.

  • Terapkan [CollectionBuilder(typeof(Factory), "Create")] pada tipe tersebut.
  • Pabriknya adalah metode static yang menerima ReadOnlySpan<T>.
  • Tipe tersebut harus menerapkan IEnumerable<T>.
  • Dengan cara inilah ImmutableArray<T> menerima [...].

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Pembuat Koleksi” gratis?

Ya — teks lengkap “Pembuat Koleksi” 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 “Pembuat Koleksi”?

Dukung ekspresi koleksi pada tipe kustom. 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 4 dari 4.

Berapa lama pelajaran “Pembuat Koleksi” 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

  1. Sintaks Ekspresi Koleksi
  2. Elemen Spread
  3. Pengetikan Koleksi Berdasarkan Target
  4. Pembuat Koleksi
← Kembali ke C# Academy