Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 24117|Svare: 1

[Kilde] Detaljert forklaring av C# Tuple VS ValueTuple

[Kopier lenke]
Publisert på 14.05.2018 16:37:48 | | | |
C# 7.0 har vært ute en stund, og alle vet at det finnes en optimalisering for tupler i den nye funksjonen: ValueTuple. Her er detaljerte eksempler for å forklare Tuple VS ValueTuple på 10 minutter for å bedre forstå fordelene og bruken av ValueTuple.

Hvis du vet nok om Tuple, kan du hoppe over seksjonen «Review Tuple» og gå rett til seksjonen «ValueTuple Explained» for å se den blendende bruken av verditupler.



Se tilbake på Tuple

Tuple er en ny funksjon som kom med C# 4.0 og er tilgjengelig i .Net Framework 4.0 og nyere.

En tuple er en datastruktur med et spesifikt antall og en sekvens av elementer. For eksempel, design en trippel datastruktur for å lagre elevinformasjon, som inneholder totalt tre elementer: det første er navnet, det andre er alderen, og det tredje er høyden.

De spesifikke bruksområdene for tupler er som følger:

1. Hvordan lage en tuple

Standard. Net-rammeverkTupler støtter bare 1 til 7 tuple-elementerHvis det er 8 elementer eller flere, må du bruke Tuples nesting og Rest-egenskaper for å implementere det. I tillegg tilbyr Tuple-klassen en statisk metode for å lage tuple-objekter.

Lag tupler ved hjelp av konstruktører:

Konstruer tupler ved hjelp av Tuple statisk metode, som støtter opptil åtte elementer:
Merk: Tuple-typen som er konstruert her er faktisk Tuple<int, int, int, int, Tuple<int>>, så datatypen som testTuple8.Rest får er Tuple<int>, så for å få den eksakte verdien må du ta Item1-egenskapen.

2. Representerer et datasett
Lag en tuple nedenfor for å representere tre opplysninger om en elev: navn, alder og høyde, uten å opprette en ekstra klasse separat.

3. Returner flere verdier fra en metode
Når en funksjon må returnere flere verdier, kan utgangsparameteren vanligvis brukes, og tupler kan brukes i stedet for ut for å returnere flere verdier.
4. Overføring av flere verdier for enkeltparametermetoder

Når funksjonsparameteren kun er én objekttype, kan flere parameterverdier sendes ved hjelp av tuple-implementasjonen.

Til tross for de ovennevnte praktiske metodene, har tupler også betydelige mangler:

  • Når du får tilgang til elementer, kan du bare få tilgang til dem via ItemX, og du må klargjøre rekkefølgen på elementene før bruk, og attributtnavnene har ingen praktisk betydning, noe som er upraktisk å huske.
  • Det finnes opptil åtte elementer, og hvis du vil ha flere, kan du bare utvide ved å nestle med det siste elementet;
  • Tuple er en referansetype, ikke en verditype som andre enkle typer, som allokerer plass på heapen og kan ha for mye arbeid med opprettelse og allokering når det er CPU-intensivt.


Derfor ble en ny ValueTuple-type introdusert i C# 7.0, som er beskrevet i de følgende avsnittene.

ValueTuple forklarer i detalj

ValueTuple er en av de nye funksjonene i C# 7.0, tilgjengelig for .Net Framework 4.7 og nyere.

ValueTuple krever ikke 4.7, så lenge nuget er greit, er 4.7 innebygd.
I tillegg er ValueTuple en strukturtype, Microsoft anbefaler å ikke bruke strukturer over 64 byte, noe som også er effektivt for ValueTuple.


En verdituple er også en datastruktur som brukes til å representere et spesifikt antall og en sekvens av elementer, men den skiller seg fra en tupleklasse, med følgende hovedforskjeller:

En verdituple er en struktur, en verditype, ikke en klasse, mens en tuple er en klasse, en referansetype;
Verditupleelementer er variable, ikke skrivebeskyttet, det vil si at de kan endre verdien til elementet i verdituplen;
En verdituple av datamedlemmer er et felt, ikke et attributt.
Den spesifikke bruken av verditupler er som følger:

1. Hvordan lage en verdituple
Som tuple-klasser støtter .Net Framework-verdi-tupler bare 1 til 7 tuple-elementer, og hvis det er 8 elementer eller flere, må du bruke de nestede og Rest-egenskapene til verdi-tupleen for å implementere det. I tillegg kan ValueTuple-klassen tilby statiske metoder for å lage verditupleobjekter.

Lag tupler ved hjelp av konstruktører:

Konstruer tupler ved hjelp av Tuple statisk metode, som støtter opptil åtte elementer:
Merk at Tuple-typen som er konstruert her faktisk er Tuple<int, int, <int>>, så datatypen som testTuple8.Rest får er Tuple<int>, så for å få den nøyaktige verdien må du ta Item1-egenskapen.

Forskjell i optimalisering:Når en tuple av verdier med mer enn 7 elementer konstrueres, kan verdiene i den nestede tupleen nås ved å bruke følgende ItemX, og for eksempelet ovenfor for å få tilgang til det tiende elementet, enten via testTuple10.Rest.Item3 eller testTuple10.Item10.
2. Representerer et datasett
Lag en tuple av verdier for å representere tre informasjonsbiter om en elev: navn, alder og høyde uten å opprette en ekstra klasse separat.
3. Returner flere verdier fra en metode
Verditupler kan også returnere flere verdier i stedet for ut-parameteren i funksjonsdefinisjonen.
Forskjell i optimalisering:Returverdien kan spesifiseres i ValueTuple uforklarlig, ved å bruke en ny syntaks (,,) i stedet, som for eksempel (streng, int, uint):
Feilsøking av typen studentInfo er ValueType-triplet.

Forskjell i optimalisering:Returverdien kan spesifisere elementnavnet for å lette forståelsen av minnetildeling og tilgang:

Praktisk minnetildeling:



4. Overføring av flere verdier for enkeltparametermetoder
Når en funksjonsparameter kun er én objekttype, kan flere verdier sendes ved hjelp av verdituple-implementasjonen.
5. Dekonstruer ValueTuple
Du kan bruke var (x, y) eller (var x, var y) for å løse tuple-elementer for å konstruere lokale variabler, mens du bruker symbolet "_" for å ignorere uønskede elementer.
Som nevnt ovenfor gjør ValueTuple C# enklere og enklere å bruke. De viktigste fordelene over Tuple er som følger:

  • ValueTuple støtter en ny syntaks for funksjonsreturverdier" (,,)", noe som gjør koden enklere;
  • Det bør bemerkes her at selv om det er navngitt, men verditupleen faktisk ikke definerer attributtet eller feltet til et slikt navn, er det virkelige navnet fortsatt ItemX, og alle elementnavn brukes kun under design og kompilering, ikke under kjøretid (så vær oppmerksom på serialiserings- og deserialiseringsoperasjoner av denne typen);
  • Noen eller alle tupler av elementer kan brukes mer praktisk ved destruksjonsmetoder;
  • Verditupler er verdityper, som er mer effektive å bruke enn tuppler av referansetyper, og verditupler har en sammenligningsmetode som kan brukes for å sammenligne om de er like, se Detaljer:https://msdn.microsoft.com/en-us/library/system.valuetuple






Foregående:Vitenskapelige populariseringsverktøy for storskalaarkitekturer
Neste:HUAWEI CLOUD lanserer blokkjede-hvitbok for å akselerere implementeringen av blokkjedeteknologibransjen
Publisert på 15.05.2018 11:41:00 |
Enig!
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com