Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 24117|Отговор: 1

[Източник] Подробно обяснение на C# Tuple срещу ValueTuple

[Копирай линк]
Публикувано в 14.05.2018 г. 16:37:48 ч. | | | |
C# 7.0 е наличен от известно време и всички знаят, че има оптимизация за кортежи в новата функция: ValueTuple. Ето подробни примери, които обясняват Tuple срещу ValueTuple за 10 минути, за да разберете по-добре ползите и употребата на ValueTuple.

Ако знаете достатъчно за Tuple, можете да пропуснете раздела "Преглед на Tuple" и да отидете директно в секцията "ValueTuple Explained", за да видите впечатляващото използване на стойностни кортежи.



Погледнете назад към Тъпъл

Tuple е нова функция, която излезе с C# 4.0 и е налична в .Net Framework 4.0 и по-нова версия.

Кортежът е структура от данни с определен брой и последователност от елементи. Например, проектирайте тройна структура от данни за съхранение на информация за учениците, която съдържа общо три елемента – първият е името, вторият е възрастта, а третият е височината.

Специфичните приложения на кортежите са следните:

1. Как да създадете кортеж

По подразбиране. Мрежова рамкаКортежите поддържат само от 1 до 7 елементаАко има 8 или повече елемента, трябва да използваш свойствата за вложение и покой на Tuple, за да ги реализираш. Освен това, класът Tuple предоставя статичен метод за създаване на кортежни обекти.

Създайте кортежи с конструктори:

Конструирайте кортежи чрез метода на Tuple статично, поддържащ до осем елемента:
Забележка: Типът Tuple, конструиран тук, всъщност е Tuple<int, int, int, int, Tuple<int>>, така че типът данни, получен от testTuple8.Rest е Tuple<int>, така че за да получите точната стойност, трябва да вземете свойството Item1.

2. Представлява набор от данни
Създайте кортеж по-долу, който да представя три части информация за ученик: име, възраст и ръст, без да създавате отделен допълнителен клас.

3. Връщане на множество стойности от даден метод
Когато една функция трябва да върне множество стойности, обикновено може да се използва параметърът out, а вместо out могат да се използват кортежи за връщане на множество стойности.
4. Многостойностен трансфер за еднопараметърни методи

Когато параметърът на функцията е само един тип обект, могат да се предават множество стойности на параметъра чрез реализацията на кортежа.

Въпреки гореспоменатите удобни методи, кортежите имат и значителни недостатъци:

  • Когато достъпвате елементи, можете да ги достъпите само чрез ItemX, и трябва да уточните реда на елементите преди употреба, а имената на атрибутите нямат практическо значение, което е неудобно за запомняне.
  • Има до осем елемента, а ако искате още, можете да разширите само като се вложите с последния елемент;
  • Tuple е референтен тип, а не стойностен тип като другите прости типове, който разпределя пространство в купчината и може да изисква твърде много работа по създаване и разпределение, когато е интензивен за процесора.


Затова беше въведен нов тип ValueTuple в C# 7.0, който е описан подробно в следващите раздели.

ValueTuple обяснява подробно

ValueTuple е една от новите функции на C# 7.0, достъпна за .Net Framework 4.7 и по-нови.

ValueTuple не изисква 4.7, стига Nuget да е наред, 4.7 е вградена.
Освен това, ValueTuple е тип структура, Microsoft препоръчва да не се използват структури над 64 байта, което е ефективно и за ValueTuple.


Кортежът на стойността е също структура от данни, използвана за представяне на определен брой и последователност от елементи, но се различава от клас на кортежи, с основните разлики:

Кортежът със стойности е структура, тип стойност, а не клас, докато кортежът е клас, референтен тип;
Елементите на стойностните кортежи са променливи, не само за четене, тоест могат да променят стойността на елемента в тортежа на стойността;
Стойностен кортеж от членове на данни е поле, а не атрибут.
Специфичната употреба на кортежи с стойност е следната:

1. Как да създадете кортеж с стойност
Подобно на класовете на кортежите, .Net Framework стойностните кортежи поддържат само 1 до 7 елемента, а ако има 8 или повече елемента, трябва да използвате вложените и Rest свойствата на стойностния кортеж, за да ги реализирате. Освен това, класът ValueTuple може да предоставя статични методи за създаване на обекти със стойностни кортежи.

Създайте кортежи с конструктори:

Конструирайте кортежи чрез метода на Tuple статично, поддържащ до осем елемента:
Обърнете внимание, че типът Tuple, конструиран тук, всъщност е Tuple<int, int, <int>>, така че типът данни, получен от testTuple8.Rest, е Tuple<int>, така че за да получите точната стойност, трябва да вземете свойството Item1.

Оптимизационна разлика:Когато се конструира кортеж от стойности с повече от 7 елемента, стойностите в вложения кортеж могат да бъдат достъпени чрез следния ItemX, а за горния пример – за достъп до десетия елемент, чрез testTuple10.Rest.Item3 или testTuple10.Item10.
2. Представлява набор от данни
Създайте кортеж от стойности, които да представят три части информация за ученик: име, възраст и ръст, без да създавате отделен допълнителен клас.
3. Връщане на множество стойности от даден метод
Кортежите на стойности могат също да връщат множество стойности вместо параметъра на изходящия в дефиницията на функцията.
Оптимизационна разлика:Връщаната стойност може да бъде необяснимо зададена в ValueTuple, използвайки нов синтаксис (,,), като (string, int, uint):
Дебъгването на типа studentInfo е ValueType триплет.

Оптимизационна разлика:Връщаната стойност може да задава името на елемента, за да улесни разбирането на разпределението и достъпа до паметта:

Удобно разпределение на паметта:



4. Многостойностен трансфер за еднопараметърни методи
Когато параметърът на функцията е само един тип обект, могат да се предават множество стойности чрез реализацията на стойностен кортеж.
5. Деконструирайте стойносттаКорта
Можете да използвате var (x, y) или (var x, var y), за да разрешите елементи на кортежа и да конструирате локални променливи, като използвате символа "_" за игнориране на нежеланите елементи.
Както беше споменато по-горе, ValueTuple прави C# по-лесен и лесен за използване. Основните предимства пред Tuple са следните:

  • ValueTuple поддържа нов синтаксис за връщане на стойности на функцията" (,,)", което прави кода по-прост;
  • Трябва да се отбележи, че въпреки че е именувана, но всъщност стойността на кортежа не дефинира атрибута или полето на такова име, истинското име все пак е ItemX, а всички имена на елементи се използват само по време на проектиране и компилация, а не по време на изпълнение (затова обърнете внимание на операциите по сериализация и десериализация на този тип);
  • Някои или всички кортежи на елементи могат да се използват по-удобно чрез методи на унищожаване;
  • Кортежите на стойността са типове стойности, които са по-ефективни за използване от кортежите на референтни типове, а кортежите имат метод за сравнение, който може да се използва за сравнение дали са равни, вижте Подробности:https://msdn.microsoft.com/en-us/library/system.valuetuple






Предишен:Инструменти за популяризиране на науката за големи архитектури
Следващ:HUAWEI CLOUD публикува Whitebook за блокчейн, за да ускори внедряването на индустрията на блокчейн технологиите
Публикувано в 15.05.2018 г. 11:41:00 ч. |
Съгласен съм!
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com