Что и когда использовать Кортеж? [дубликат]

этот вопрос уже есть ответ здесь:

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

5 ответов


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

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

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

  2. для обеспечения легкого доступа к набору данных и манипулирования им.

  3. для возврата нескольких значений из метода без использования out параметров (в C#) или ByRef параметры (в Visual Basic).

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


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

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


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


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

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


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

имена свойства имеют место № 1, место № 2, Item3 ..., что может не иметь смысла в некоторых случаях или без документации.

классы кортежей имеют строго типизированные общие параметры. Тем не менее пользователи классов кортежей могут выводить из типа универсальных параметров.