Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 24117|Antwoord: 1

[Bron] Gedetailleerde uitleg van C# Tuple VS ValueTuple

[Link kopiëren]
Geplaatst op 14-05-2018 16:37:48 | | | |
C# 7.0 is al een tijd uit, en iedereen weet dat er een optimalisatie voor tuples is in de nieuwe functie: ValueTuple. Hier zijn gedetailleerde voorbeelden om Tuple VS ValueTuple in 10 minuten uit te leggen, zodat je de voordelen en het gebruik van ValueTuple beter kunt begrijpen.

Als je genoeg weet over Tuple, kun je de sectie "Review Tuple" overslaan en direct naar de sectie "ValueTuple Explained" gaan om het verbluffende gebruik van waarde-tuples te zien.



Kijk terug naar Tuple

Tuple is een nieuwe functie die met C# 4.0 werd uitgebracht en beschikbaar is in .Net Framework 4.0 en hoger.

Een tuple is een datastructuur met een specifiek aantal en reeks elementen. Ontwerp bijvoorbeeld een drievoudige datastructuur om leerlinginformatie op te slaan, die in totaal drie elementen bevat: het eerste is de naam, het tweede de leeftijd en het derde de lengte.

De specifieke toepassingen van tuples zijn als volgt:

1. Hoe een tuple te maken

Standaard. NetraamwerkTuples ondersteunen slechts 1 tot 7 tuple-elementenAls er 8 elementen of meer zijn, moet je de nesting- en Rest-eigenschappen van Tuple gebruiken om het te implementeren. Daarnaast biedt de Tuple-klasse een statische methode om tuple-objecten te creëren.

Maak tuples met constructors:

Bouw tupels met behulp van de statische Tuple-methode, die tot acht elementen ondersteunt:
Opmerking: Het hier geconstrueerde Tuple-type is eigenlijk Tuple<int, int, int, int, Tuple<int>>, dus het datatype dat door testTuple8.Rest wordt verkregen is Tuple<int>, dus om de exacte waarde te krijgen, moet je de eigenschap Item1 nemen.

2. Stelt een set gegevens weer
Maak hieronder een tuple aan om drie informatie over een leerling weer te geven: naam, leeftijd en lengte, zonder apart een extra klas aan te maken.

3. Geef meerdere waarden terug uit een methode
Wanneer een functie meerdere waarden moet teruggeven, kan de out-parameter meestal worden gebruikt, en tuples kunnen in plaats van out worden gebruikt om meerdere waarden terug te geven.
4. Multi-waarde overdracht voor methoden met één parameter

Wanneer de functieparameter slechts één Objecttype is, kunnen meerdere parameterwaarden worden doorgegeven met behulp van de tuple-implementatie.

Ondanks de hierboven genoemde handige methoden hebben tuples ook aanzienlijke tekortkomingen:

  • Bij het benaderen van elementen kun je ze alleen via ItemX bereiken, en je moet de volgorde van elementen vooraf verduidelijken, en de attribuutnamen hebben geen praktische betekenis, wat onhandig is om te onthouden.
  • Er zijn tot acht elementen, en als je er meer wilt, kun je alleen uitbreiden door te genesten met het laatste element;
  • Tuple is een referentietype, geen waardetype zoals andere eenvoudige types, dat ruimte toewijst op de heap en te veel creatie- en allocatiewerk kan vereisen wanneer het CPU-intensief is.


Daarom werd in C# 7.0 een nieuw type ValueTuple geïntroduceerd, dat in de volgende secties wordt toegelicht.

ValueTuple legt het in detail uit

ValueTuple is een van de nieuwe functies van C# 7.0, beschikbaar voor .Net Framework 4.7 en hoger.

ValueTuple vereist geen 4.7, zolang nuget prima is, is 4.7 ingebouwd.
Daarnaast is ValueTuple een structuurtype; Microsoft raadt aan geen structuren van meer dan 64 bytes te gebruiken, wat ook effectief is voor ValueTuple.


Een waardetuple is ook een datastructuur die wordt gebruikt om een specifiek aantal en een reeks elementen weer te geven, maar het verschilt van een tupleklasse, met de volgende belangrijkste verschillen:

Een waardetuple is een structuur, een waardetype, geen klasse, terwijl een tuple een klasse is, een referentietype;
Waarde-tuple-elementen zijn variabel, niet alleen-lezen, dat wil zeggen, ze kunnen de waarde van het element in de waarde-tuple veranderen;
Een waardetuple van dataleden is een veld, geen attribuut.
Het specifieke gebruik van waardetuples is als volgt:

1. Hoe maak je een waardetuple
Net als tuple-klassen ondersteunen .Net Framework-waarde-tuples slechts 1 tot 7 tuple-elementen, en als er 8 elementen of meer zijn, moet je de geneste en Rest-eigenschappen van de waarde-tuple gebruiken om het te implementeren. Daarnaast kan de ValueTuple-klasse statische methoden bieden voor het creëren van waardetuple-objecten.

Maak tuples met constructors:

Bouw tupels met behulp van de statische Tuple-methode, die tot acht elementen ondersteunt:
Let op dat het hier geconstrueerde Tuple-type eigenlijk Tuple<int, int, <int>> is, dus het datatype dat testTuple8.Rest verkregen is Tuple<int>, dus om de nauwkeurige waarde te krijgen, moet je de eigenschap Item1 nemen.

Verschil in optimalisatie:Wanneer een tuple van waarden met meer dan 7 elementen wordt geconstrueerd, kunnen de waarden in de geneste tuple worden benaderd met de volgende ItemX, en voor het bovenstaande voorbeeld om het tiende element te bereiken, hetzij via testTuple10.Rest.Item3 of testTuple10.Item10.
2. Stelt een set gegevens weer
Maak een tuple van waarden om drie stukjes informatie over een leerling weer te geven: naam, leeftijd en lengte, zonder apart een extra klas aan te maken.
3. Geef meerdere waarden terug uit een methode
Waardetuples kunnen ook meerdere waarden teruggeven in plaats van de uitparameter in de functiedefinitie.
Verschil in optimalisatie:De returnwaarde kan in de ValueTuple op onverklaarbare wijze worden gespecificeerd, met een nieuwe syntaxis (,,) in plaats daarvan, zoals (string, int, uint):
Het debuggen van het type studentInfo is de ValueType-triplet.

Verschil in optimalisatie:De returnwaarde kan de naam van het element specificeren om het begrijpen van geheugentoewijzing en -toegang te vergemakkelijken:

Handige geheugentoewijzing:



4. Multi-waarde overdracht voor methoden met één parameter
Wanneer een functieparameter slechts één Objecttype is, kunnen meerdere waarden worden doorgegeven met behulp van de implementatie van de waardetuple.
5. Deconstrueren de ValueTuple
Je kunt var (x, y) of (var x, var y) gebruiken om tuple-elementen op te lossen en lokale variabelen te construeren, terwijl je het symbool "_" gebruikt om ongewenste elementen te negeren.
Zoals hierboven vermeld, maakt ValueTuple C# eenvoudiger en gebruiksvriendelijker. De belangrijkste voordelen ten opzichte van Tuple zijn als volgt:

  • ValueTuple ondersteunt een nieuwe syntaxis voor functie-terugkerwaarden "(,,)", waardoor de code eenvoudiger wordt;
  • Het moet hier worden opgemerkt dat hoewel het een naam heeft, de waardetuple in feite het attribuut of veld van zo'n naam niet definieert, de echte naam nog steeds ItemX is, en alle elementnamen alleen worden gebruikt tijdens ontwerp en compilatie, niet tijdens runtime (let dus op de serialisatie- en deserialisatiebewerkingen van dit type);
  • Sommige of alle tuples van elementen kunnen gemakkelijker worden gebruikt met vernietigingsmethoden;
  • Waardetuples zijn waardetypes, die efficiënter te gebruiken zijn dan tuples van referentietypes, en waardetuples hebben een vergelijkingsmethode waarmee je kunt vergelijken of ze gelijk zijn, zie Details:https://msdn.microsoft.com/en-us/library/system.valuetuple






Vorig:Wetenschappelijke popularisatietools voor grootschalige architecturen
Volgend:HUAWEI CLOUD brengt Blockchain White Paper uit om de implementatie van de blockchaintechnologie-industrie te versnellen
Geplaatst op 15-05-2018 11:41:00 |
Ik ben het ermee eens!
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com