Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 24117|Ответ: 1

[Источник] Подробное объяснение C# Tuple против ValueTuple

[Скопировать ссылку]
Опубликовано 14.05.2018 16:37:48 | | | |
C# 7.0 вышел уже давно, и все знают, что в новой функции — ValueTuple есть оптимизация для кортежей. Вот подробные примеры, чтобы объяснить Кортеж против ValueTuple за 10 минут, чтобы лучше понять преимущества и применение ValueTuple.

Если вы достаточно хорошо знаете о кортежах, вы можете пропустить раздел «Обзор кортежа» и сразу перейти в раздел «ValueTuple Explained», чтобы увидеть впечатляющее использование кортежей ценности.



Оглянитесь назад на Тапл

Tuple — это новая функция, появившаяся в C# 4.0 и доступная в .Net Framework 4.0 и выше.

Кортеж — это структура данных с определённым количеством и последовательностью элементов. Например, спроектировать тройную структуру данных для хранения информации учащихся, которая содержит в общей сложности три элемента: первый — имя, второй — возраст, третий — рост.

Конкретные применения кортежей следующие:

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

По умолчанию. Сетевой фреймворкКортежи поддерживают только от 1 до 7 элементов кортежаЕсли элементов 8 или больше, нужно использовать свойства вложения и отдыха Tuple для реализации. Кроме того, класс кортежа предоставляет статический метод создания объектов кортежа.

Создайте кортежи с помощью конструкторов:

Постройте кортежи с помощью метода кортежа статических, поддерживая до восьми элементов:
Примечание: тип кортежа, построенный здесь, на самом деле является Tuple<int, int, int, int, Tuple<int>> то есть тип данных, полученный через testTuple8.Rest — это Tuple<int>, поэтому чтобы получить точное значение, нужно использовать свойство Item1.

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

3. Возврат нескольких значений из одного метода
Когда функция должна вернуть несколько значений, обычно можно использовать параметр выхода, а вместо выходных — кортежи для возврата нескольких значений.
4. Многозначная передача для однопараметрических методов

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

Несмотря на вышеупомянутые удобные методы, кортежи также имеют значительные недостатки:

  • При доступе к элементам можно получить доступ только через ItemX, и нужно уточнить порядок элементов перед использованием, а имена атрибутов не имеют практического значения, что неудобно запоминать.
  • В игре до восьми элементов, и если хотите больше, можно расширить только вложившись с последним элементом;
  • Кортеж — это эталонный тип, а не тип значения, как другие простые типы, который выделяет пространство на куче и может требовать слишком много работы по созданию и распределению при высокой нагрузке на процессор.


Поэтому в C# 7.0 был введён новый тип ValueTuple, который подробно описан в следующих разделах.

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<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. Деконструировать ValueTuple
Вы можете использовать var (x, y) или (var x, var y) для разрешения элементов кортежа с целью построения локальных переменных, при этом символ «_» игнорирует нежелательные элементы.
Как уже упоминалось, ValueTuple делает C# проще и удобнее в использовании. Основные преимущества перед Tuple следующие:

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






Предыдущий:Инструменты популяризации науки для крупномасштабных архитектур
Следующий:HUAWEI CLOUD выпустила Белую книгу по блокчейну, чтобы ускорить внедрение индустрии блокчейн-технологий
Опубликовано 15.05.2018 11:41:00 |
Принимаю!
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com