Kokoelmien rakentajat
Tukekaa kokoelmalausekkeita mukautetuissa tyypeissä.
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); // 3Myö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); // 4Milloin 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 tyypinReadOnlySpan<T>. - Tyypin on toteutettava
IEnumerable<T>. - Näin
ImmutableArray<T>hyväksyy syntaksin[...].
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
- Kokoelmalausekkeiden syntaksi
- Spread-elementti
- Kokoelmien kohdetyypitys
- Kokoelmien rakentajat