Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 24117|Atsakyti: 1

[Šaltinis] Išsamus C# Tuple VS ValueTuple paaiškinimas

[Kopijuoti nuorodą]
Paskelbta 2018-05-14 16:37:48 | | | |
C# 7.0 jau kurį laiką buvo išleistas, ir visi žino, kad naujoje funkcijoje yra optimizavimas tupeliams: ValueTuple. Štai išsamūs pavyzdžiai, paaiškinantys Tuple VS ValueTuple per 10 minučių, kad geriau suprastumėte ValueTuple naudą ir naudojimą.

Jei pakankamai žinote apie Tuple, galite praleisti skyrių "Review Tuple" ir eiti tiesiai į skyrių "ValueTuple Paaiškinta", kad pamatytumėte akinantį vertės tuples naudojimą.



Pažvelkite atgal į Tuple

"Tuple" yra nauja funkcija, kuri pasirodė su C# 4.0 ir yra prieinama .Net Framework 4.0 ir naujesnėse versijose.

Tupelis yra duomenų struktūra su tam tikru elementų skaičiumi ir seka. Pavyzdžiui, sukurkite trigubą duomenų struktūrą studentų informacijai saugoti, kurioje iš viso yra trys elementai: pirmasis yra vardas, antrasis - amžius, o trečias - ūgis.

Konkretūs tuplių naudojimo būdai yra šie:

1. Kaip sukurti tupelį

Numatytasis. Grynasis karkasasTuples palaiko tik nuo 1 iki 7 tuple elementųJei yra 8 ar daugiau elementų, turite naudoti Tuple lizdų ir poilsio ypatybes, kad jį įgyvendintumėte. Be to, Tuple klasė suteikia statinį tuple objektų kūrimo metodą.

Sukurkite tuples naudodami konstruktorius:

Sukonstruokite tuples naudodami statinį "Tuple" metodą, palaikydami iki aštuonių elementų:
Pastaba: Čia sukonstruotas Tuple tipas iš tikrųjų yra Tuple<int, int, int, int, Tuple<int>>, todėl duomenų tipas, gautas testTuple8.Rest, yra Tuple<int>, todėl norint gauti tikslią reikšmę, reikia paimti ypatybę Item1.

2. Atspindi duomenų rinkinį
Žemiau sukurkite rinkinį, kuris parodytų tris informacijos apie mokinį dalis: vardą, amžių ir ūgį, atskirai nesukurdami papildomos klasės.

3. Grąžinkite kelias metodo reikšmes
Kai funkcijai reikia grąžinti kelias reikšmes, paprastai galima naudoti parametrą out, o vietoj out galima naudoti tuples kelioms reikšmėms grąžinti.
4. Kelių reikšmių perdavimas vieno parametro metodams

Kai funkcijos parametras yra tik vienas objekto tipas, naudojant tuple diegimą galima perduoti kelias parametrų reikšmes.

Nepaisant aukščiau paminėtų patogių metodų, tupeliai taip pat turi didelių trūkumų:

  • Pasiekdami elementus, juos galite pasiekti tik per "ItemX", o prieš naudojimą turite išsiaiškinti elementų tvarką, o atributų pavadinimai neturi praktinės reikšmės, kurią nepatogu atsiminti.
  • Yra iki aštuonių elementų, o jei norite daugiau, galite išplėsti tik įdėdami paskutinį elementą;
  • Tuple yra nuorodos tipas, o ne reikšmių tipas, kaip kiti paprasti tipai, kuris paskirsto vietą krūvoje ir gali turėti per daug kūrimo ir paskirstymo darbo, kai procesorius intensyvus.


Todėl C# 7.0 buvo pristatytas naujas ValueTuple tipas, kuris išsamiai aprašytas tolesniuose skyriuose.

ValueTuple išsamiai paaiškina

ValueTuple yra viena iš naujų C# 7.0 funkcijų, prieinamų .Net Framework 4.7 ir naujesnėms versijoms.

ValueTuple nereikalauja 4.7, kol nuget yra gerai, 4.7 yra įmontuotas.
Be to, "ValueTuple" yra struktūros tipas, "Microsoft" rekomenduoja nenaudoti didesnių nei 64 baitų struktūrų, o tai taip pat veiksminga "ValueTuple".


Reikšmių rinkinys taip pat yra duomenų struktūra, naudojama konkrečiam elementų skaičiui ir sekai pavaizduoti, tačiau ji skiriasi nuo tuplių klasės, turinti šiuos pagrindinius skirtumus:

Reikšmių rinkinys yra struktūra, reikšmės tipas, o ne klasė, o tupelis yra klasė, nuorodos tipas;
Vertės tupel elementai yra kintami, ne tik skaitomi, tai yra, jie gali pakeisti elemento reikšmę vertės tuple;
Duomenų narių reikšmių rinkinys yra laukas, o ne atributas.
Konkretus reikšmių tuplių naudojimas yra toks:

1. Kaip sukurti vertės tupelį
Kaip ir tuple klasės, .Net Framework reikšmių tupeliai palaiko tik nuo 1 iki 7 tuple elementų, o jei yra 8 ar daugiau elementų, turite naudoti įdėtąsias ir Rest reikšmių tuple ypatybes. Be to, ValueTuple klasė gali pateikti statinius vertės tuple objektų kūrimo metodus.

Sukurkite tuples naudodami konstruktorius:

Sukonstruokite tuples naudodami statinį "Tuple" metodą, palaikydami iki aštuonių elementų:
Atkreipkite dėmesį, kad čia sukonstruotas Tuple tipas iš tikrųjų yra Tuple<int, int, <int>>, todėl duomenų tipas, gautas testTuple8.Rest, yra Tuple<int>, todėl norint gauti tikslią reikšmę, reikia paimti ypatybę Item1.

Optimizavimo skirtumas:Kai sukonstruojamas reikšmių rinkinys, turintis daugiau nei 7 elementus, įdėtojo rinkinio reikšmes galima pasiekti naudojant šį ItemX, o aukščiau pateiktame pavyzdyje - pasiekti dešimtąjį elementą per testTuple10.Rest.Item3 arba testTuple10.Item10.
2. Atspindi duomenų rinkinį
Sukurkite reikšmių rinkinį, kad nurodytumėte tris informacijos apie mokinį dalis: vardą, amžių ir ūgį, atskirai nekurdami papildomos klasės.
3. Grąžinkite kelias metodo reikšmes
Reikšmių tupeliai taip pat gali grąžinti kelias reikšmes vietoj parametro out funkcijos apibrėžime.
Optimizavimo skirtumas:Grąžinama reikšmė gali būti nepaaiškinamai nurodyta ValueTuple, naudojant naują sintaksę (,,), pvz., (string, int, uint):
Derinant studentInfo tipą yra ValueType tripletas.

Optimizavimo skirtumas:Grąžinama reikšmė gali nurodyti elemento pavadinimą, kad būtų lengviau suprasti atminties priskyrimą ir prieigą:

Patogus atminties priskyrimas:



4. Kelių reikšmių perdavimas vieno parametro metodams
Kai funkcijos parametras yra tik vienas objekto tipas, naudojant reikšmės tuple diegimą galima perduoti kelias reikšmes.
5. Dekonstruokite ValueTuple
Galite naudoti var (x, y) arba (var x, var y), kad išspręstumėte tupel elementus, kad sukurtumėte vietinius kintamuosius, o naudodami simbolį "_", kad nepaisytumėte nepageidaujamų elementų.
Kaip minėta aukščiau, "ValueTuple" daro C# paprastesnį ir lengviau naudojamą. Pagrindiniai pranašumai, palyginti su "Tuple", yra šie:

  • ValueTuple palaiko naują sintaksę funkcijos grąžinamos reikšmės" (,,)", todėl kodas yra paprastesnis;
  • Čia reikėtų pažymėti, kad nors jis ir pavadintas, tačiau iš tikrųjų reikšmės tupelis neapibrėžia tokio pavadinimo atributo ar lauko, tikrasis vardas vis tiek yra ItemX, o visi elementų pavadinimai naudojami tik projektuojant ir kompiliuojant, o ne vykdymo metu (todėl atkreipkite dėmesį į tokio tipo serializavimo ir deserializavimo operacijas);
  • Kai kuriuos ar visus elementų tuples galima patogiau naudoti naudojant naikinimo metodus;
  • Reikšmių tupeliai yra reikšmių tipai, kuriuos naudoti efektyviau nei nuorodų tipų rinkinius, o reikšmių tupeliai turi palyginimo metodą, kurį galima naudoti norint palyginti, ar jie yra vienodi, žr.https://msdn.microsoft.com/en-us/library/system.valuetuple






Ankstesnis:Mokslo populiarinimo įrankiai didelės apimties architektūroms
Kitą:"HUAWEI CLOUD" išleido "Blockchain" baltąją knygą, skirtą paspartinti "Blockchain" technologijų pramonės diegimą
Paskelbta 2018-05-15 11:41:00 |
Aš sutinku!
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com