Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 24117|Válasz: 1

[Forrás] Részletes magyarázat a C# Tuple kontra ValueTuple-ról

[Linket másol]
Közzétéve 2018. 05. 14. 16:37:48 | | | |
A C# 7.0 már egy ideje elérhető, és mindenki tudja, hogy az új funkcióban, az ValueTuple-ban van egy optimalizáció a tuple-okra. Íme részletes példák a Tuple VS ValueTuple 10 perc alatt, hogy jobban megértsük az ValueTuple előnyeit és használatát.

Ha eleget tudsz a Tuple-ról, kihagyhatod a "Review Tuple" részt és mehetsz egyenesen a "ValueTuple magyarázat" részre, hogy lásd az érték tuplák lenyűgöző használatát.



Nézz vissza Tuple-ra

A Tuple egy új funkció, amely a C# 4.0-val jelent meg, és elérhető a .Net Framework 4.0 vagy annál magasabb verziókban.

A tuple egy adatstruktúra, amelynek meghatározott száma és elemei sorrendje van. Például tervezz egy hármas adatstruktúrát a diákok információinak tárolására, amely összesen három elemet tartalmaz: az első a név, a második az életkor, a harmadik pedig a magasság.

A tuplés konkrét felhasználási területei a következők:

1. Hogyan hozzunk létre egy tuple-t

Alapértelmezett. Net FrameworkA tuplák csak 1-től 7-ig terjedő elemeket támogatnakHa 8 vagy több elem van, akkor a Tuple-nak a Nesting és Rest tulajdonságait kell használni a megvalósításhoz. Ezen felül a Tuple osztály statikus módszert biztosít a tuple objektumok létrehozására.

Konstruktorokkal hozz létre tuplekat:

Építsd a tuple-okat a Tuple statikus módszerrel, amely legfeljebb nyolc elemet támogat:
Megjegyzés: Az itt felépített Tuple típus valójában Tuple<int, int, int, int, Tuple<int>>, tehát a testTuple8.Rest által kapott adattípus Tuple<int>, tehát a pontos érték eléréséhez az Item1 tulajdonságot kell venni.

2. Egy adathalmazt képvisel
Készíts alább egy tuple-t, amely három információt képvisel egy diákról: nevet, életkort és magasságot, anélkül, hogy külön osztályt hozna létre.

3. Több értéket vissza egy módszerből
Ha egy függvénynek több értéket kell visszaadnia, általában az out paramétert lehet használni, és a tuplák is használhatók az out helyett, hogy több értéket adjunk vissza.
4. Többértékes átvitel egyparaméteres módszerekhez

Ha a függvény paraméter csak egy objektumtípus, több paraméterértéket is átadhatunk a tuple implementációval.

A fent említett kényelmes módszerek ellenére a tupléseknek jelentős hiányosságai is vannak:

  • Az elemekhez való hozzáférésnél csak az ItemX-en keresztül lehet hozzájuk, és használat előtt tisztázni kell az elemek sorrendjét, az attribútumneveknek nincs gyakorlati jelentésük, ami kényelmetlen megjegyezni.
  • Akár nyolc elem is lehet, és ha többet akarsz, csak az utolsó elemmel bészkelsz ki;
  • A Tuple referenciatípus, nem értéktípus, mint más egyszerű típusok, amelyek helyet osztanak a halomban, és túl sok létrehozási és allokációs munkát igényelhet, ha CPU-igényes.


Ezért egy új ValueTuple típust vezettek be a C# 7.0-ban, amelyet a következő szakaszokban részleteznek.

A ValueTuple részletesen magyarázza

A ValueTuple a C# 7.0 egyik új funkciója, amely elérhető a .Net Framework 4.7 vagy annál magasabb verziókban.

A ValueTuple nem igényel 4.7-et, amíg a nuget rendben van, a 4.7 beépített verzió.
Ezen felül a ValueTuple egy struktúratípus, a Microsoft pedig azt javasolja, hogy ne használjunk 64 bájtos struktúrákat, ami szintén hatékony a ValueTuple-nál.


Az érték tuple egyben egy adatstruktúra is, amely egy adott számot és elemsorrendet képvisel, de eltér a tuple osztálytól, a következő főbb különbségekkel:

Az érték tuple egy struktúra, értéktípus, nem osztály, míg a tuple egy osztály, egy referencia típus;
Az érték tuple elemek változóak, nem csak olvashatók, vagyis megváltoztathatják az érték tuple elemének értékét;
Az adattagok érték-tupleje egy mező, nem attribútum.
Az érték tupláinak konkrét felhasználása a következő:

1. Hogyan hozzunk létre értékes tuplet
Ahogy a tuple osztályok, a .Net Framework érték tuple-ok is csak 1-től 7-ig támogatnak tuple-elemeket, és ha 8 vagy több elem van, akkor a tuple érték beépített és rest tulajdonságait kell használni a megvalósításhoz. Ezen felül a ValueTuple osztály statikus módszereket is biztosíthat érték tuple objektumok létrehozására.

Konstruktorokkal hozz létre tuplekat:

Építsd a tuple-okat a Tuple statikus módszerrel, amely legfeljebb nyolc elemet támogat:
Megjegyzendő, hogy az itt felépített Tuple típus valójában Tuple<int, int, <int>>, tehát a testTuple8.Rest által kapott adattípus Tuple<int>, tehát a pontos érték eléréséhez az Item1 tulajdonságot kell venni.

Optimalizálási különbség:Ha egy több mint 7 elemből álló értékekből álló tuple-t építünk, a beágyazott tuple értékei a következő ItemX segítségével érhető el, és a fenti példában a tizedik elemhez is hozzáférhetünk, akár testTuple10.Rest.Item3, akár testTuple10.Item10 segítségével.
2. Egy adathalmazt képvisel
Hozz létre egy érték-tuplet, amely három információt képvisel egy diákról: név, életkor és magasság, anélkül, hogy külön osztályt hozna létre.
3. Több értéket vissza egy módszerből
Az érték-tuplák több értéket is visszaadhatnak a függvénydefinícióban a kiadott paraméter helyett.
Optimalizálási különbség:A visszaküldési érték megmagyarázhatatlanul megadható az ValueTuple-ban, helyette egy új szintaxissal (,,), például (string, int, uint):
A studentInfo típusának hibáztatása a ValueType hármas.

Optimalizálási különbség:A visszaadó érték megadhatja az elem nevét, hogy megkönnyítse a memória hozzárendelésének és hozzáférésének megértését:

Kényelmes memória kiosztás:



4. Többértékes átvitel egyparaméteres módszerekhez
Ha egy függvényparaméter csak egy objektumtípus, több értéket is átadhatnak az érték tuple implementációval.
5. Dekonstrukció az ValueTuple-t
Használhatod a var (x, y) vagy (var x, var y) tuplés elemeket feloldva helyi változók építésére, miközben a "_" szimbólummal figyelmen kívül hagyhatod a nem kívánt elemeket.
Ahogy fentebb említettük, a ValueTuple egyszerűbbé és könnyebben használhatóvá teszi a C#-ot. A Tuple-hoz képest a főbb előnyök a következők:

  • A ValueTuple új szintaxist támogat a függvényvisszaadó értékekhez" (,,)", amely egyszerűbbé teszi a kódot;
  • Fontos megjegyezni, hogy bár elnevezik, de valójában az érték tuple nem határozza meg az ilyen név attribútumját vagy mezőjét, a valódi név továbbra is ItemX, és minden elemnevet csak tervezés és fordítás során használnak, nem futásidőben (ezért figyelj a sorozatosítási és deserializációs műveletekre ebben a típusban);
  • Egyes vagy összes elemi tuple kényelmesebben használható pusztítási módszerekkel;
  • Az érték tuplák értéktípusok, amelyek hatékonyabbak használni, mint a referencia típusok tuplái, és az érték tupláinak összehasonlító módszere is van, amellyel összehasonlítható, egyenlőek-e – lásd Részletek:https://msdn.microsoft.com/en-us/library/system.valuetuple






Előző:Tudományos népszerűsítő eszközök nagyszabású architektúrákhoz
Következő:A HUAWEI CLOUD kiadta a blokklánc fehér könyvét, hogy felgyorsítsa a a blokklánc technológiai ipar bevezetését
Közzétéve 2018. 05. 15. 11:41:00 |
Egyetértek!
Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com