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


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

  • Практический пример, где Кортеж может быть использован в .Net 4.0? 19 ответов

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

5 116

5 ответов:

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

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

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

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

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

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

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

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

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

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

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

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

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

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