C# Academy · Oppitunti

Kokoelmien kohdetyypitys

Antakaa kohdetyypin ohjata kokoelman luontia.

Oppitunti 3/413 vaihetta

Kokoelmien kohdetyypitys on ilmainen C# Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/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.

Mitä kohdetyypitys tarkoittaa

Kohdetyitys tarkoittaa, että kääntäjä päättelee kokoelmalausekkeen muodostaman tyypin käyttöyhteydestä sen sijaan, että oikealla puolella ilmoitettaisiin tyyppi erikseen.

using System;

int[] numbers = [1, 2, 3]; // target type is int[]
Console.WriteLine(numbers.GetType().Name); // Int32[]

Kohde määrittää tyypin

Sama literaali muuttuu eri konkreettiseksi tyypiksi sen mukaan, mihin muuttujaan, parametriin tai palautustyyppiin se välitetään.

using System;
using System.Collections.Generic;

int[] asArray = [1, 2, 3];
List<int> asList = [1, 2, 3];
Console.WriteLine(asArray is int[]);  // True
Console.WriteLine(asList is List<int>); // True

Kohdetyypitys metodikutsuissa

Kun metodin parametri on kokoelmatyyppi, argumenttiliteraali saa kyseisen parametrin kohdetyypin.

using System;
using System.Collections.Generic;

static void Show(List<int> items) =>
    Console.WriteLine(string.Join(",", items));

Show([10, 20, 30]); // target-typed to List<int>

Kohdetyypitys palautuksissa

Metodin runko voi palauttaa paljaan kokoelmalausekkeen, jolloin ilmoitettu palautustyyppi antaa sille kohdetyypin.

using System;
using System.Collections.Generic;

static List<string> Tags() => ["csharp", "dotnet", "ranges"];

Console.WriteLine(Tags().Count); // 3

Alkiotyypin päättely

Alkiotyyppi tulee kohteesta. Jos kohde on double[], kokonaislukuliteraalit muunnetaan automaattisesti laajentamalla tyypiksi double.

using System;

double[] values = [1, 2, 3]; // ints widen to double
Console.WriteLine(values[0] + 0.5); // 1.5

Rajapinnat kohteina

Kokoelmalausekkeiden kohdetyyppinä voi olla esimerkiksi IEnumerable<T>, IReadOnlyList<T> tai ICollection<T>. Kääntäjä valitsee sopivan konkreettisen tyypin.

using System;
using System.Collections.Generic;

IReadOnlyList<int> ro = [1, 2, 3];
Console.WriteLine(ro.Count); // 3

Ternäärioperaattori ja kohdetyypitys

Ehdollisen lausekkeen molemmat haarat voivat olla kokoelmalausekkeita, joista kumpikin saa yhteisen tulostyypin kohdetyypityksen avulla.

using System;

bool useDefaults = false;
int[] config = useDefaults ? [0, 0, 0] : [1, 2, 3];
Console.WriteLine(string.Join(",", config)); // 1,2,3

var ei ole kohde

Et voi kirjoittaa var x = [1, 2, 3];, koska var ei anna kohdetyyppiä. Ilmoita tyyppi erikseen tai käytä lauseketta kohdassa, jossa tyyppi on tiedossa.

using System;

// var x = [1, 2, 3]; // compile error: no target type
int[] x = [1, 2, 3]; // ok
Console.WriteLine(x.Length); // 3

Kohdetyypitys levityselementtien kanssa

Kohdetyypitys ja levityselementit toimivat yhdessä: kohde määrittää lopullisen kokoelmatyypin, kun taas levityselementit tuottavat sisällön.

using System;
using System.Collections.Generic;

int[] src = [1, 2, 3];
List<int> copy = [..src]; // copies into a List<int>
Console.WriteLine(copy is List<int>); // True

Turhan toiston vähentäminen

Kohdetyypitys poistaa toistuvat tyyppinimet. Vertaa turhan toisteista vanhaa muotoa tiiviiseen uuteen muotoon.

using System;

// old: type repeated
int[] oldWay = new int[] { 1, 2, 3 };
// new: type only on the left
int[] newWay = [1, 2, 3];
Console.WriteLine(oldWay.Length == newWay.Length); // True

Kokonaisuuden yhdistäminen

Tässä yksi apumetodi hyväksyy minkä tahansa vain luku -kokoelman, ja kutsujat voivat välittää sille vapaasti kohdetyypitettyjä literaaleja.

using System;
using System.Collections.Generic;

static int Count(IReadOnlyCollection<int> c) => c.Count;

Console.WriteLine(Count([1, 2, 3, 4])); // 4

Pikatarkistus

Testaa, miten hyvin hallitset kohdetyypityksen.

Kertaus

Opit, miten kokoelmalausekkeet saavat kohdetyyppinsä.

  • Kohdetyyppi (muuttuja, parametri tai palautustyyppi) ohjaa muodostamista.
  • Alkiotyypit voivat laajentua kohdetyypin mukaisiksi.
  • Rajapinnat, kuten IReadOnlyList<T>, ovat kelvollisia kohteita.
  • var ei voi toimia kohteena.
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 kohdetyypitys” ilmainen?

Kyllä – oppitunnin ”Kokoelmien kohdetyypitys” 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 kohdetyypitys”?

Antakaa kohdetyypin ohjata kokoelman luontia. 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 3/4.

Kuinka kauan ”Kokoelmien kohdetyypitys”-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