C# 7.0 on ollut saatavilla jo jonkin aikaa, ja kaikki tietävät, että uudessa ominaisuudessa: ValueTuple, on optimoitu tupleille. Tässä on yksityiskohtaisia esimerkkejä Tuplen ja ValueTuplen selittämiseksi 10 minuutissa, jotta ymmärrät paremmin ValueTuplen hyödyt ja käytön.
Jos tiedät tarpeeksi Tuplesta, voit ohittaa osion "Review Tuple" ja mennä suoraan kohtaan "ValueTuple Explained" nähdäksesi arvotuplejen häikäisevän käytön.
Katso taaksepäin Tupleen
Tuple on uusi ominaisuus, joka julkaistiin C# 4.0:n mukana ja on saatavilla .Net Framework 4.0:ssa ja uudemmissa versioissa.
Tuple on tietorakenne, jossa on tietty määrä ja alkioiden järjestys. Esimerkiksi suunnittele kolmoistietorakenne opiskelijatietojen tallentamiseen, joka sisältää yhteensä kolme elementtiä: ensimmäinen on nimi, toinen ikä ja kolmas pituus.
Tuplejen erityiskäyttötavat ovat seuraavat:
1. Kuinka luoda tuple
Oletus. Net-kehysTuplit tukevat vain 1–7 tuple-elementtiäJos elementtejä on 8 tai enemmän, sinun täytyy käyttää Tuplen nesting- ja Rest-ominaisuuksia toteuttaaksesi sen. Lisäksi Tuple-luokka tarjoaa staattisen menetelmän tuple-olioiden luomiseen.
Luo tuplet konstruktoreilla:
Rakenna tuplet Tuple-staattisella menetelmällä, joka tukee enintään kahdeksaa elementtiä:
Huomautus: Tässä rakennettu Tuple-tyyppi on itse asiassa Tuple<int, int, int, int, Tuple<int>>, joten testTuple8.Restin saama tietotyyppi on Tuple<int>, joten saadaksesi tarkan arvon, sinun täytyy ottaa Item1-ominaisuus.
2. Edustaa aineistoa Luo alle tuple, joka esittää kolme tietoa opiskelijasta: nimi, ikä ja pituus, ilman että luodaan erillistä lisäluokkaa.
3. Palauta useita arvoja metodista Kun funktion täytyy palauttaa useita arvoja, out-parametria voidaan yleensä käyttää, ja tupleja voidaan käyttää outin sijaan palauttamaan useita arvoja.
4. Moniarvosiirto yksiparametrisille menetelmille
Kun funktioparametri on vain yksi objektityyppi, tuple-toteutuksella voidaan välittää useita parametriarvoja.
Edellä mainituista kätevistä menetelmistä huolimatta tupleilla on myös merkittäviä puutteita:
- Kun käytät elementtejä, niihin pääsee käsiksi vain ItemX:n kautta, ja sinun täytyy selventää elementtien järjestys ennen käyttöä, ja attribuuttinimet eivät ole käytännöllistä merkitystä, mikä on hankalaa muistaa.
- Elementtejä voi olla enintään kahdeksan, ja jos haluat enemmän, voit laajentaa vain pesättämällä viimeisen elementin;
- Tuple on referenssityyppi, ei arvotyyppi kuten muut yksinkertaiset tyypit, joka varaa tilaa kasalle ja voi aiheuttaa liikaa luomista ja allokointia, kun CPU-intensiivinen työ.
Tämän vuoksi uusi ValueTuple-tyyppi esiteltiin C# 7.0:ssa, joka on kuvattu seuraavissa osioissa.
ValueTuple selittää yksityiskohtaisesti
ValueTuple on yksi C# 7.0:n uusista ominaisuuksista, joka on saatavilla .Net Framework 4.7:lle ja uudemmille versioille.
ValueTuple ei vaadi 4.7:ää, kunhan nuget on kunnossa, 4.7 on sisäänrakennettu. Lisäksi ValueTuple on rakennetyyppi, Microsoft suosittelee välttämään yli 64 tavun rakenteita, mikä on myös tehokasta ValueTuplelle.
Arvotupli on myös tietorakenne, jota käytetään edustamaan tiettyä lukua ja alkioiden sarjaa, mutta se eroaa tuple-luokasta, ja sillä on seuraavat pääasialliset erot:
Arvotuple on rakenne, arvotyyppi, ei luokka, kun taas tuple on luokka, viitetyyppi; Arvotuple-alkiot ovat muuttuvia, eivät vain luku -lukuja, eli ne voivat muuttaa alkion arvoa arvossa; Datajäsenten arvotuple on kenttä, ei attribuutti. Arvotuplien tarkka käyttötarkoitus on seuraava:
1. Kuinka luoda arvotuple Kuten tuple-luokat, .Net Frameworkin arvotuplet tukevat vain 1–7 tuple-elementtiä, ja jos alkioita on 8 tai enemmän, sinun täytyy käyttää arvotuplen sisäkkäisiä ja Rest-ominaisuuksia sen toteuttamiseen. Lisäksi ValueTuple-luokka voi tarjota staattisia menetelmiä arvotuple-olioiden luomiseen.
Luo tuplet konstruktoreilla:
Rakenna tuplet Tuple-staattisella menetelmällä, joka tukee enintään kahdeksaa elementtiä:
Huomaa, että tässä rakennettu Tuple-tyyppi on itse asiassa Tuple<int, int, <int>>, joten testTuple8.Restin saama tietotyyppi on Tuple<int>, joten saadaksesi tarkan arvon, sinun täytyy ottaa Item1-ominaisuus.
Optimointiero:Kun rakennetaan arvojen tuple, jossa on yli 7 alkiota, sisäkkäisessä tuplessa olevat arvot voidaan käyttää seuraavalla ItemX:llä, ja yllä olevassa esimerkissä kymmenennen alkion avautumiseen joko testTuple10.Rest.Item3:n tai testTuple10.Item10:n kautta.
2. Edustaa aineistoa Luo arvojen tuple, joka edustaa kolmea tietoa opiskelijasta: nimi, ikä ja pituus, ilman että luodaan erillinen luokka.
3. Palauta useita arvoja metodista Arvotuplit voivat myös palauttaa useita arvoja ulos-parametrin sijaan funktiomääritelmässä.
Optimointiero:Palautusarvo voidaan määritellä ValueTuplessa selittämättömästi, käyttäen uutta syntaksia (,,), kuten (string, int, uint):
StudentInfo-tyypin virheenkorjaus on ValueType-kolmoinen.
Optimointiero:Palautusarvo voi määrittää elementin nimen helpottaakseen muistin jakamisen ja pääsyn ymmärtämistä:
Kätevä muistin jako:
4. Moniarvosiirto yksiparametrisille menetelmille Kun funktioparametri on vain yksi Object-tyyppi, useita arvoja voidaan välittää arvotuple-toteutuksella.
5. Pura ValueTuple Voit käyttää var (x, y) tai (var x, var y) tuple-alkioiden ratkaisemiseen paikallisten muuttujien rakentamiseksi, samalla kun symboli "_" sivuuttaaksesi ei-toivotut alkiot.
Kuten aiemmin mainittiin, ValueTuple tekee C#:sta yksinkertaisemman ja helpommin käytettävän. Tärkeimmät edut Tupleen verrattuna ovat seuraavat:
- ValueTuple tukee uutta syntaksia funktioiden palautusarvoille" (,,)", mikä tekee koodista yksinkertaisemman;
- On huomioitava, että vaikka nimi on nimetty, mutta arvotuple ei itse asiassa määritä kyseisen nimen attribuuttia tai kenttää, oikea nimi on silti ItemX, ja kaikkien alkioiden nimiä käytetään vain suunnittelun ja kääntämisen aikana, ei ajonaikaisesti (joten kiinnitä huomiota tämän tyyppisiin sarjallistamis- ja deserialisointioperaatioihin);
- Joitakin tai kaikkia elementtien tupleja voidaan käyttää kätevämmin tuhoamismenetelmillä;
- Arvotuplit ovat arvotyyppejä, jotka ovat tehokkaampia käyttää kuin referenssityyppien tuplet, ja arvotupleilla on vertailumenetelmä, jolla voidaan vertailla, ovatko ne yhtä suuret, katso Tiedot:https://msdn.microsoft.com/en-us/library/system.valuetuple
|