See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 24117|Vastuse: 1

[Allikas] Üksikasjalik selgitus C# Tuple VS ValueTuple kohta

[Kopeeri link]
Postitatud 14.05.2018 16:37:48 | | | |
C# 7.0 on juba mõnda aega väljas olnud ja kõik teavad, et uues funktsioonis ValueTuple'is on tuplite optimeerimine. Siin on üksikasjalikud näited, kuidas selgitada Tuple VS ValueTuple 10 minutiga, et paremini mõista ValueTuple'i eeliseid ja kasutust.

Kui tead Tuple'ist piisavalt, võid vahele jätta jaotise "Review Tuple" ja minna otse jaotisse "ValueTuple selgitatud", et näha väärtustuplede säravat kasutust.



Vaata tagasi Tuple'ile

Tuple on uus funktsioon, mis tuli välja koos C# 4.0-ga ja on saadaval .Net Framework 4.0 ja uuemates versioonides.

Tuple on andmestruktuur, millel on kindel arv ja elementide jada. Näiteks kujunda kolmekordne andmestruktuur õpilaste info salvestamiseks, mis sisaldab kokku kolme elementi: esimene on nimi, teine vanus ja kolmas pikkus.

Tuplite spetsiifilised kasutusalad on järgmised:

1. Kuidas luua tuple

Vaikimisi. Neti raamistikTuplid toetavad ainult 1 kuni 7 tupli elementiKui elemente on 8 või rohkem, pead selle rakendamiseks kasutama Tuple'i pesastamise ja Rest omadusi. Lisaks pakub Tuple klass staatilist meetodit tuple-objektide loomiseks.

Loo tuplid konstruktorite abil:

Konstrukteeri tupleid Tuple staatilise meetodiga, toetades kuni kaheksat elementi:
Märkus: siin konstrueeritud Tuple tüüp on tegelikult Tuple<int, int, int, int, Tuple<int>>, seega testTuple8.Rest poolt saadud andmetüüp on Tuple<int>, seega täpse väärtuse saamiseks tuleb võtta Item1 omadus.

2. Esindab andmekogumit
Loo allpool tuple, mis esindab kolme teavet õpilase kohta: nimi, vanus ja pikkus, ilma eraldi klassi loomata.

3. Tagasta meetodist mitu väärtust
Kui funktsioon peab tagastama mitu väärtust, saab üldiselt kasutada väljundi parameetrit ning tupleid võib kasutada väljundi asemel, et tagastada mitu väärtust.
4. Mitme väärtuse ülekandmine ühe parameetriga meetodite jaoks

Kui funktsiooniparameeter on ainult üks objektitüüp, saab tuple-implementatsiooni abil edastada mitut parameetri väärtust.

Hoolimata eelmainitud mugavatest meetoditest on tuplitel ka olulisi puudusi:

  • Elementidele ligi pääsedes saad neile ligi ainult ItemX kaudu ning enne kasutamist tuleb elementide järjekorda täpsustada ning atribuutide nimedel puudub praktiline tähendus, mis on ebamugav meelde jätta.
  • Elemente on kuni kaheksa ja kui soovid rohkem, saad laiendada ainult viimase elemendiga pesastades;
  • Tuple on referentstüüp, mitte väärtustüüp nagu teised lihtsad tüübid, mis eraldab kuhjale ruumi ja võib CPU-intensiivses töös olla liiga palju loomist ja jaotust.


Seetõttu tutvustati uut ValueTuple'i tüüpi C# 7.0-s, mida kirjeldatakse järgmistes osades.

ValueTuple selgitab seda üksikasjalikult

ValueTuple on üks C# 7.0 uutest funktsioonidest, mis on saadaval .Net Framework 4.7 ja uuematele versioonidele.

ValueTuple ei vaja 4.7, kui nuget on korras, 4.7 on sisseehitatud.
Lisaks on ValueTuple struktuuritüüp, Microsoft soovitab mitte kasutada struktuure, mis ületavad 64 baidi, mis on samuti tõhus ValueTuple'i puhul.


Väärtuse tuple on samuti andmestruktuur, mida kasutatakse konkreetse arvu ja elementide jada esindamiseks, kuid see erineb tuple-klassist, millel on järgmised peamised erinevused:

Väärtustuple on struktuur, väärtustüüp, mitte klass, samas kui tuple on klass, viitetüüp;
Väärtuse tuple elemendid on muutuvad, mitte ainult lugemiseks, st nad võivad muuta tupli elemendi väärtust;
Andmeliikmete väärtustuple on väli, mitte atribuut.
Väärtustuplede konkreetne kasutus on järgmine:

1. Kuidas luua väärtustuple
Nagu tuple-klassid, toetavad .Net Frameworki väärtustuplid ainult 1 kuni 7 tuple-elementi, ja kui elemente on 8 või rohkem, pead kasutama väärtus-tuple pesastatud ja Rest omadusi selle rakendamiseks. Lisaks võib ValueTuple klass pakkuda staatilisi meetodeid väärtustuple objektide loomiseks.

Loo tuplid konstruktorite abil:

Konstrukteeri tupleid Tuple staatilise meetodiga, toetades kuni kaheksat elementi:
Pane tähele, et siin konstrueeritud Tuple tüüp on tegelikult Tuple<int, int, <int>>, seega testTuple8.Rest poolt saadud andmetüüp on Tuple<int>, seega täpse väärtuse saamiseks tuleb võtta Item1 omadus.

Optimeerimise erinevus:Kui konstrueeritakse väärtuste tuple, millel on rohkem kui 7 elementi, saab pesastatud tupli väärtustele ligi järgmise ItemX abil ning ülaltoodud näite puhul pääseb ligi kümnendale elemendile kas testTuple10.Rest.Item3 või testTuple10.Item10 kaudu.
2. Esindab andmekogumit
Loo väärtuste tuple, mis esindab kolme teavet õpilase kohta: nimi, vanus ja pikkus, ilma eraldi klassi loomata.
3. Tagasta meetodist mitu väärtust
Väärtustuplid võivad funktsiooni definitsioonis tagastada ka mitu väärtust väljundparameetri asemel.
Optimeerimise erinevus:Tagastamise väärtust saab ValueTuple'is seletamatult määratleda, kasutades uut süntaksit (,,), näiteks (string, int, uint):
StudentInfo tüübi silumine on ValueType kolmik.

Optimeerimise erinevus:Tagastatav väärtus võib määrata elemendi nime, et hõlbustada mälu määramise ja ligipääsu mõistmist:

Mugav mälu määramine:



4. Mitme väärtuse ülekandmine ühe parameetriga meetodite jaoks
Kui funktsiooniparameeter on ainult üks objektitüüp, saab väärtustuple rakenduse abil edastada mitu väärtust.
5. Dekonstrueeri ValueTuple
Saad kasutada var (x, y) või (var x, var y) tuple-elementide lahendamiseks lokaalsete muutujate konstrueerimiseks, samal ajal kui sümbolit "_" kasutatakse soovimatute elementide ignoreerimiseks.
Nagu eespool mainitud, teeb ValueTuple C# lihtsamaks ja lihtsamaks kasutada. Peamised eelised Tuple'i ees on järgmised:

  • ValueTuple toetab uut süntaksit funktsioonide tagastusväärtuste jaoks" (,,)", mis muudab koodi lihtsamaks;
  • Siin tuleb märkida, et kuigi nimi on nimeline, kuid tegelikult ei määra väärtustuple sellise nime atribuuti ega välja, on tegelik nimi siiski ItemX ning kõiki elementide nimesid kasutatakse ainult disaini ja kompileerimise ajal, mitte käitusajal (seega pöörake tähelepanu selle tüübi seriaalistamise ja deserialiseerimise operatsioonidele);
  • Mõnda või kõiki elementide tupleid saab kasutada mugavamalt hävitusmeetoditega;
  • Väärtustuplid on väärtustüübid, mida on tõhusam kasutada kui viitetüüpide tupleid, ning väärtustupledel on võrdlusmeetod, millega võrrelda, kas need on võrdsed, vt Detailid:https://msdn.microsoft.com/en-us/library/system.valuetuple






Eelmine:Teaduse populariseerimise tööriistad suurte arhitektuuride jaoks
Järgmine:HUAWEI CLOUD avaldab plokiahela valge raamatu, et kiirendada plokiahela tehnoloogia tööstuse rakendamist
Postitatud 15.05.2018 11:41:00 |
Ma nõustun!
Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com