Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 24117|Svar: 1

[Källa] Detaljerad förklaring av C# Tuple VS ValueTuple

[Kopiera länk]
Publicerad på 2018-05-14 16:37:48 | | | |
C# 7.0 har funnits ute ett tag, och alla vet att det finns en optimering för tupler i den nya funktionen: ValueTuple. Här är detaljerade exempel för att förklara Tuple VS ValueTuple på 10 minuter för att bättre förstå fördelarna och användningen av ValueTuple.

Om du vet tillräckligt om Tuple kan du hoppa över avsnittet "Review Tuple" och gå direkt till avsnittet "ValueTuple Explained" för att se den bländande användningen av värdetupler.



Titta tillbaka på Tuple

Tuple är en ny funktion som kom med C# 4.0 och finns tillgänglig i .Net Framework 4.0 och uppåt.

En tuple är en datastruktur med ett specifikt antal och en följd av element. Till exempel, designa en trippeldatastruktur för att lagra studentinformation, som innehåller totalt tre element: det första är namnet, det andra är åldern och det tredje är längden.

De specifika användningsområdena för tupler är följande:

1. Hur man skapar en tuple

Standard. Net FrameworkTupler stöder endast 1 till 7 tupleelementOm det finns 8 element eller fler behöver du använda Tuples nesting och Rest-egenskaper för att implementera det. Dessutom tillhandahåller Tuple-klassen en statisk metod för att skapa tupleobjekt.

Skapa tupler med konstruktörer:

Konstruera tupler med Tuple-statisk metod, som stöder upp till åtta element:
Notera: Tuple-typen som konstrueras här är faktiskt Tuple<int, int, int, int, Tuple<int>>, så datatypen som erhålls av testTuple8.Rest är Tuple<int>, så för att få det exakta värdet måste du ta Item1-egenskapen.

2. Representerar en datamängd
Skapa en tuple nedan för att representera tre uppgifter om en elev: namn, ålder och längd, utan att skapa en separat klass.

3. Returnera flera värden från en metod
När en funktion behöver returnera flera värden kan out-parametern vanligtvis användas, och tupler kan användas istället för out för att returnera flera värden.
4. Multivärdesöverföring för metoder med en enda parameter

När funktionsparametern endast är en objekttyp kan flera parametervärden skickas med hjälp av tuple-implementationen.

Trots de ovan nämnda praktiska metoderna har tupler också betydande brister:

  • När du får tillgång till element kan du bara komma åt dem via ItemX, och du behöver klargöra ordningen på elementen innan användning, och attributnamnen har ingen praktisk betydelse, vilket är besvärligt att komma ihåg.
  • Det finns upp till åtta element, och om du vill ha fler kan du bara expandera genom att bädda med det sista elementet;
  • Tuple är en referenstyp, inte en värdetyp som andra enkla typer, som allokerar utrymme på heapen och kan kräva för mycket skapande och allokering när det är CPU-intensivt.


Därför introducerades en ny ValueTuple-typ i C# 7.0, som beskrivs i följande avsnitt.

ValueTuple förklarar i detalj

ValueTuple är en av de nya funktionerna i C# 7.0, tillgänglig för .Net Framework 4.7 och uppåt.

ValueTuple kräver inte 4.7, så länge nuget är okej, 4.7 är inbyggt.
Dessutom är ValueTuple en strukturtyp, Microsoft rekommenderar att man inte använder strukturer över 64 byte, vilket också är effektivt för ValueTuple.


En värdetuple är också en datastruktur som används för att representera ett specifikt antal och en sekvens av element, men den skiljer sig från en tupleklass, med följande huvudsakliga skillnader:

En värdetuple är en struktur, en värdetyp, inte en klass, medan en tuple är en klass, en referenstyp;
Värdetuplelement är variabla och inte skrivskyddade, det vill säga de kan ändra värdet på elementet i värdetuplen;
En värdetuple av datamedlemmar är ett fält, inte ett attribut.
Den specifika användningen av värdetupler är följande:

1. Hur man skapar en värdetuple
Precis som tupleklasser stöder .Net Framework-värdetupler bara 1 till 7 tuple-element, och om det finns 8 eller fler element behöver du använda de nästlade och Rest-egenskaperna för värdetuplen för att implementera det. Dessutom kan ValueTuple-klassen tillhandahålla statiska metoder för att skapa värdetupleobjekt.

Skapa tupler med konstruktörer:

Konstruera tupler med Tuple-statisk metod, som stöder upp till åtta element:
Observera att Tuple-typen som konstrueras här faktiskt är Tuple<int, int, <int>>, så datatypen som erhålls av testTuple8.Rest är Tuple<int>, så för att få det korrekta värdet måste du ta Item1-egenskapen.

Optimeringsskillnad:När en tuple av värden med fler än 7 element konstrueras kan värdena i den nästlade tuplen nås med följande ItemX, och för exemplet ovan för att komma åt det tionde elementet, antingen via testTuple10.Rest.Item3 eller testTuple10.Item10.
2. Representerar en datamängd
Skapa en tuple av värden för att representera tre informationsbitar om en elev: namn, ålder och längd utan att skapa en separat klass.
3. Returnera flera värden från en metod
Värdetupler kan också returnera flera värden istället för utparametern i funktionsdefinitionen.
Optimeringsskillnad:Returvärdet kan specificeras i ValueTuple oförklarligt, med hjälp av en ny syntax (,,) istället, såsom (sträng, int, uint):
Att felsöka typen av studentInfo är ValueType-trippelen.

Optimeringsskillnad:Returvärdet kan specificera elementets namn för att underlätta förståelsen av minnestilldelning och åtkomst:

Bekväm minnestilldelning:



4. Multivärdesöverföring för metoder med en enda parameter
När en funktionsparameter endast är en objekttyp kan flera värden skickas med hjälp av värdetuple-implementationen.
5. Dekonstruera värdetuplen
Du kan använda var (x, y) eller (var x, var y) för att lösa tuple-element för att konstruera lokala variabler, samtidigt som du använder symbolen "_" för att ignorera oönskade element.
Som nämnts ovan gör ValueTuple C# enklare och lättare att använda. De främsta fördelarna jämfört med Tuple är följande:

  • ValueTuple stöder en ny syntax för funktionsreturnvärden" (,,)", vilket gör koden enklare;
  • Det bör noteras här att även om det är namngivet, så definierar värdetupeln faktiskt inte attributet eller fältet för ett sådant namn, så är det riktiga namnet fortfarande ItemX, och alla elementnamn används endast under design och kompilering, inte under körning (så var uppmärksam på serialiserings- och deserialiseringsoperationerna av denna typ);
  • Vissa eller alla tupler av element kan användas mer bekvämt med destruktionsmetoder;
  • Värdetupler är värdetyper, som är mer effektiva att använda än tupler av referenstyper, och värdetupler har en jämförelsemetod som kan användas för att jämföra om de är lika, se Detaljer:https://msdn.microsoft.com/en-us/library/system.valuetuple






Föregående:Vetenskapspopulariseringsverktyg för storskaliga arkitekturer
Nästa:HUAWEI CLOUD släpper blockkedjevitbok för att påskynda implementeringen av blockkedjeteknikindustrin
Publicerad på 2018-05-15 11:41:00 |
Jag håller med!
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com