C# 7.0 je už nějakou dobu na trhu a všichni vědí, že nová funkce: ValueTuple, nabízí optimalizaci pro n-tice. Zde jsou podrobné příklady, které vysvětlí Tuple VS ValueTuple během 10 minut, abyste lépe pochopili výhody a využití ValueTuple.
Pokud o n-tici víte dost, můžete přeskočit sekci "Review Tuple" a jít rovnou do sekce "ValueTuple Explained", kde vidíte oslnivé využití hodnotových n-tic.
Podívejte se zpět na Tuple
Tuple je nová funkce, která vyšla s C# 4.0 a je dostupná v .Net Framework 4.0 a novějších.
N-tice je datová struktura s konkrétním počtem a posloupností prvků. Například navrhněte trojitou datovou strukturu pro ukládání informací o studentech, která obsahuje celkem tři prvky: první je jméno, druhý věk a třetí výška.
Specifické využití n-tic je následující:
1. Jak vytvořit n-tici
Výchozí. Net FrameworkN-tice podporují pouze 1 až 7 prvků n-ticPokud je 8 prvků nebo více, musíte použít vlastnosti vnoření a odpočinku n-tic k jeho implementaci. Kromě toho třída n-tic poskytuje statickou metodu pro vytváření objektů n-tic.
Vytvářejte n-tice pomocí konstruktorů:
Konstruujte n-tice pomocí statické metody n-tic, podporující až osm prvků:
Poznámka: Typ n-tice vytvořený zde je ve skutečnosti Tuple<int, int, int, int, Tuple<int>>, takže datový typ získaný testTuple8.Rest je Tuple<int>, takže pro získání přesné hodnoty je potřeba vzít vlastnost Item1.
2. Představuje množinu dat Vytvořte níže n-tici, která bude reprezentovat tři informace o studentovi: jméno, věk a výšku, aniž byste vytvářeli další třídu zvlášť.
3. Vraťte více hodnot z metody Když funkce potřebuje vracet více hodnot, lze obecně použít parametr výstupu a n-tice lze použít místo výstupu k vrácení více hodnot.
4. Vícehodnotový přenos pro metody s jedním parametrem
Pokud je parametr funkce pouze jeden typ objektu, lze pomocí implementace n-tice předat více hodnot parametrů.
Navzdory výše zmíněným praktickým metodám mají n-tice také významné nedostatky:
- Při přístupu k prvkům k nim můžete přistupovat pouze přes ItemX a je potřeba si před použitím upřesnit pořadí prvků, přičemž názvy atributů nemají žádný praktický význam, což je nepříjemné si zapamatovat.
- Je zde až osm prvků, a pokud chcete víc, můžete se rozšířit pouze vnořením s posledním prvkem;
- N-tice je referenční typ, nikoli typ hodnoty jako jiné jednoduché typy, které přidělují místo na haldě a při náročnosti CPU mohou mít příliš mnoho práce na vytváření a alokaci.
Proto byl v C# 7.0 zaveden nový typ ValueTuple, který je podrobně popsán v následujících sekcích.
ValueTuple to podrobně vysvětluje
ValueTuple je jednou z nových funkcí C# 7.0, dostupnou pro .Net Framework 4.7 a novější.
ValueTuple nevyžaduje 4.7, pokud je nuget v pořádku, 4.7 je vestavěný. Navíc ValueTuple je typ struktury, Microsoft doporučuje nepoužívat struktury nad 64 bajtů, což je účinné i pro ValueTuple.
N-tice hodnoty je také datová struktura používaná k reprezentaci konkrétního počtu a posloupnosti prvků, ale liší se od třídy n-tic a má následující hlavní rozdíly:
N-tice s hodnotou je struktura, typ hodnoty, nikoli třída, zatímco n-tice je třída, referenční typ; Prvky n-tice jsou proměnné, nejsou pouze pro čtení, tedy mohou měnit hodnotu prvku v n-tici; N-tice datových členů je pole, nikoli atribut. Specifické použití hodnotových tic je následující:
1. Jak vytvořit hodnotovou n-tici Stejně jako třídy n-tic, i n-tice hodnot v .Net Frameworku podporují pouze 1 až 7 prvků, a pokud je jich 8 nebo více, musíte použít vnořené a Rest vlastnosti n-tice hodnoty k implementaci. Kromě toho třída ValueTuple může poskytovat statické metody pro vytváření objektů hodnotových n-tic.
Vytvářejte n-tice pomocí konstruktorů:
Konstruujte n-tice pomocí statické metody n-tic, podporující až osm prvků:
Všimněte si, že zde vytvořený typ n-tice je ve skutečnosti Tuple<int, int, <int>>, takže datový typ získaný testTuple8.Rest je Tuple<int>, takže pro získání přesné hodnoty je nutné vzít vlastnost Item1.
Rozdíl v optimalizaci:Když je vytvořena n-tice hodnot s více než 7 prvky, lze k hodnotám v vnořené n-tici přistupovat pomocí následující položky X a v příkladu výše k přístupu k desátému prvku, buď přes testTuple10.Rest.Item3 nebo testTuple10.Item10.
2. Představuje množinu dat Vytvořte n-tici hodnot, která reprezentuje tři informace o studentovi: jméno, věk a výšku, aniž byste vytvářeli další třídu zvlášť.
3. Vraťte více hodnot z metody N-tice hodnot mohou také vracet více hodnot místo výstupního parametru v definici funkce.
Rozdíl v optimalizaci:Vrácenou hodnotu lze v ValueTuple nevysvětlitelně zadat pomocí nové syntaxe (,,), například (string, int, uint):
Ladění typu studentInfo je trojice ValueType.
Rozdíl v optimalizaci:Vrácená hodnota může specifikovat název prvku, aby bylo možné lépe pochopit přiřazení a přístup k paměti:
Pohodlné přiřazení paměti:
4. Vícehodnotový přenos pro metody s jedním parametrem Pokud je parametr funkce pouze jedním typem objektu, lze pomocí implementace n-tice předat více hodnot.
5. Dekonstruujte hodnotovou tici Můžete použít var (x, y) nebo (var x, var y) k vyřešení prvků n-tice pro vytvoření lokálních proměnných, zatímco symbol "_" můžete použít k ignorování nežádoucích prvků.
Jak bylo zmíněno výše, ValueTuple usnadňuje a usnadňuje používání C#. Hlavní výhody oproti n-tici jsou následující:
- ValueTuple podporuje novou syntaxi pro hodnoty vrácených funkcí" (,,)", což kód zjednodušuje;
- Je třeba poznamenat, že ačkoliv je n-tice pojmenována, ve skutečnosti n-tice nedefinuje atribut nebo pole takového jména, skutečné jméno je stále ItemX a všechny názvy prvků se používají pouze při návrhu a kompilaci, nikoli za běhu (proto věnujte pozornost operacím serializace a deserializace tohoto typu);
- Některé nebo všechny n-tice prvků lze pohodlněji použít pomocí destrukčních metod;
- N-tice s hodnotami jsou typy hodnot, které jsou efektivnější na použití než n-tice referenčních typů, a n-tice mají srovnávací metodu, která umožňuje porovnat, zda jsou si rovné, viz Podrobnosti:https://msdn.microsoft.com/en-us/library/system.valuetuple
|