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
|