Что и когда использовать Tuple?

Может кто-нибудь объяснить, что такое "Кортеж" и как его использовать в сценарии реального мира. Я хотел бы узнать, как это может обогатить мой опыт кодирования?

Ответ 1

Эта статья msdn очень хорошо объясняет примеры: "Кортеж - это структура данных, которая имеет конкретную число и последовательность элементов".

Кортежи обычно используются четырьмя способами:

  • Представить единый набор данных. Например, кортеж может представляют собой запись базы данных, и ее компоненты могут представлять отдельные поля записи.

  • Чтобы обеспечить легкий доступ к набору данных и их манипулирование.

  • Чтобы вернуть несколько значений из метода без использования параметров (в С#) или ByRef (в Visual Basic).

  • Передавать несколько значений методу с помощью одного параметра. Для Например, метод Thread.Start(Object) имеет единственный параметр, который позволяет указать одно значение для метода, выполняемого потоком в время запуска. Если вы предоставляете объект Tuple<T1, T2, T3> в качестве метода аргумент, вы можете поставить процедуру запуска потоков тремя элементы данных.

Ответ 2

Кортеж позволяет комбинировать несколько значений, возможно, разных типов, в одном объекте, не создавая собственный класс. Это может быть полезно, если вы хотите написать метод, который, например, возвращает три связанных значения, но вы не хотите создавать новый класс.

Обычно вы должны создать класс, так как это позволяет вам давать полезные имена для каждого свойства. Код, который широко использует кортежи, быстро станет нечитаемым, потому что свойства называются Item1, Item2, Item3 и т.д.

Ответ 3

Разница между кортежем и классом заключается в том, что кортеж не имеет имен свойств. Это почти никогда не бывает хорошо, и я бы использовал только кортеж, когда аргументы довольно бессмысленны, как в абстрактной математической формуле Eg. абстрактное исчисление более 5,6,7 измерений может иметь кортеж для координат.

Ответ 4

Это самое важное, что нужно знать о типе Tuple. Tuple - это класс, а не структура. Таким образом, он будет распределен по управляемой куче. Каждый выделенный экземпляр класса добавляет нагрузку на сбор мусора.

Примечание: Свойства Item1, Item2 и далее не имеют сеттеров. Вы не можете назначить их. Tuple неизменен после создания в памяти.

Ответ 5

Классы Tuple позволяют разработчикам быть "быстрыми и ленивыми", не определяя конкретный класс для конкретного использования.

Имена свойств - Item1, Item2, Item3..., которые могут быть не значимыми в некоторых случаях или без документации.

Классы классов имеют строго типизированные общие параметры. Все еще пользователи классов Tuple могут вывести из типа общих параметров.