C# Academy · Oppitunti

Kokoelmien rakentajat

Tukekaa kokoelmalausekkeita mukautetuissa tyypeissä.

Oppitunti 4/413 vaihetta

Kokoelmien rakentajat on ilmainen C# Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu C# Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. C# Academy-kurssilla on yhteensä 4 oppituntia.

Mukautetut tyypit kokoelmalausekkeissa

Kokoelmalausekkeet eivät rajoitu sisäänrakennettuihin tyyppeihin. [CollectionBuilder]-attribuutin avulla oman tyypin voi luoda [...]-syntaksilla.

CollectionBuilder-attribuutti

Käytä kokoelmatyypissäsi attribuuttia [CollectionBuilder(typeof(Factory), "Create")]. Se nimeää staattisen tehdasmetodin, jota kääntäjä kutsuu ilmentymien luomiseen.

Muodostajametodin allekirjoitus

Muodostajametodin on oltava static, otettava vastaan yksi ReadOnlySpan<T>-parametri ja palautettava kokoelmatyyppisi. Kääntäjä välittää alkiot span-rakenteena.

Pieni mukautettu kokoelma

Tässä on pieni muuttumaton kokoelma, joka ottaa kokoelmalausekkeilla luomisen käyttöön muodostajan avulla.

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();

Miksi ReadOnlySpan?

Span-parametrin ansiosta kääntäjä voi välittää alkiot ilman väliaikaista varausta. Muodostaja kopioi ne tarvitsemaansa tallennustilaan.

IEnumerable on pakollinen

Kokoelmatyypin on toteutettava IEnumerable<T> (span-rakenteen alkiotyypin mukaisesti), jotta kääntäjä tuntee alkiotyypin ja voi tarkistaa käytön oikeellisuuden.

Yleiset muodostajat

Muodostajat voivat olla geneerisiä ja tukea tyyppiä MyCollection<T>. Muodostajametodi ottaa vastaan tyypin ReadOnlySpan<T> ja palauttaa tyypin 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();

Muuttumattomien kokoelmien hyöty

Muodostajien avulla .NET:n muuttumattomat kokoelmat, kuten ImmutableArray<T>, tukevat kokoelmalausekkeita. Muodostaja luo jäädytetyn ilmentymän span-rakenteen pohjalta.

using System;
using System.Collections.Immutable;

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

Myös levityselementit toimivat

Kun tyypillä on muodostaja, levityselementit toimivat automaattisesti sen kokoelmalausekkeissa, koska kääntäjä muodostaa edelleen yhden span-rakenteen alkioista.

using System;
using System.Collections.Immutable;

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

Milloin muodostaja kannattaa lisätä

Lisää [CollectionBuilder], kun julkaiset mukautetun kokoelman ja haluat tarjota kutsujille tiiviin [...]-syntaksin, etenkin muuttumattomille tai erityistarkoitukseen suunnitelluille säilöille.

Kokonaisuuden yhdistäminen

Muodostajassa on vain kolme osaa: attribuutti, IEnumerable<T>-tyyppi ja staattinen Create(ReadOnlySpan<T>)-metodi. Näiden avulla tyypistäsi tulee täysiverinen kokoelmalausekkeiden kohde.

Pikatarkistus

Varmista, että tunnet kokoelman muodostajan vaatimukset.

Kertaus

Opit, miten mukautetut tyypit tukevat kokoelmalausekkeita.

  • Käytä tyypissä attribuuttia [CollectionBuilder(typeof(Factory), "Create")].
  • Tehdas on static-metodi, joka ottaa vastaan tyypin ReadOnlySpan<T>.
  • Tyypin on toteutettava IEnumerable<T>.
  • Näin ImmutableArray<T> hyväksyy syntaksin [...].
Aloita maksutta

Opi C# tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
93
Oppitunnit
346

Usein kysytyt kysymykset

Onko oppitunti ”Kokoelmien rakentajat” ilmainen?

Kyllä – oppitunnin ”Kokoelmien rakentajat” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko C# Academy-kurssin, päivitä CoddyKit PROhon. C# Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Kokoelmien rakentajat”?

Tukekaa kokoelmalausekkeita mukautetuissa tyypeissä. Harjoittelet C# Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni C# Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin C# Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.

Kuinka kauan ”Kokoelmien rakentajat”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä C# Academy-oppitunnilla?

Kyllä. Jokainen C# Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Kokoelmalausekkeiden syntaksi
  2. Spread-elementti
  3. Kokoelmien kohdetyypitys
  4. Kokoelmien rakentajat
← Takaisin: C# Academy