:: Не фоксом единым
Tuple не представляет кортеж
S-type

Сообщений: 2969
Дата регистрации: 24.04.2004
На msdn.microsoft.com сказано:

Цитата:
Класс Tuple сам по себе не представляет кортеж. Вместо этого он является классом, предоставляющим статические методы для создания экземпляров типов кортежей, поддерживаемых платформой .NET Framework. Он предоставляет вспомогательные методы, которые можно вызвать для создания объектов кортежа без явного указания типа каждого компонента кортежа.

Приведён пример:

// Create a 7-tuple.
var population = new Tuple<string, int, int, int, int, int, int>(
"New York", 7891957, 7781984,
7894862, 7071639, 7322564, 8008278);

Переменная population имеет тип Tuple<string, int, int, int, int, int, int>. Не понятно, какой смысл вкладывается в "не представляет кортеж"? Может,это погрешности перевода?
Ratings: 0 negative/0 positive
Re: Tuple не представляет кортеж
Igor Korolyov
Автор

Сообщений: 34580
Дата регистрации: 28.05.2002
Смысл простой. Класс Tuple и класс, к примеру, Tuple<T1, T2> это два абсолютно разных класса. И если второй это один из видов "кортежа", то первый - не более чем вспомогательный класс, упрощающий создание "кортежей".
Не вижу сложностей с пониманием примера из MSDN - в одном случае чуть больше букв и напрямую вызывается конструктор кортежа, во втором - чуть меньше букв и вызывается метод этого класса-помощника который создаёт и возвращает кортеж. Автоматический вывод типов для generic методов как раз и позволяет сильно уменьшить писанину, т.к. не требуется ни перечислять все типы элементов кортежа, ни даже просто указывать их количество.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Tuple не представляет кортеж
S-type

Сообщений: 2969
Дата регистрации: 24.04.2004
Igor Korolyov
Класс Tuple и класс, к примеру, Tuple<T1, T2> это два абсолютно разных класса. И если второй это один из видов "кортежа", то первый - не более чем вспомогательный класс, упрощающий создание "кортежей".
Т.е. он нужен только для создания... Посмотрел - методы Create(...) есть только у класса Tuple, у классов Tuple<...> этих методов нет. Зато есть ToValueTuple (хотя, формально, это не метод это класса Tuple, это метод расширения класса TupleExtensions).

Спасибо - теперь понятно.



Исправлено 1 раз(а). Последнее : S-type, 18.04.17 10:18
Ratings: 0 negative/0 positive
Re: Tuple не представляет кортеж
Igor Korolyov
Автор

Сообщений: 34580
Дата регистрации: 28.05.2002
S-type
Т.е. он нужен только для создания...
Да, это своего рода фабрика.
S-type
Посмотрел - методы Create(...) есть только у класса Tuple, у классов Tuple<...> этих методов нет.
Это было бы странно - у этих классов есть конструктор, и большой пользы от статического метода Create в самих классах Tuple<...> я не вижу - делать перегрузки позволяющие создавать, к примеру, Tuple<T1,T2,T3> из метода Create класса Tuple<T1> - как-то не логично, да и слишком большое дублирование кода будет (если 3-кортеж может создавать класс 1-кортежа, то и все прочие n-кортежи должны иметь такую возможность - т.е. придётся во всех 8-ми классах делать все эти 8 методов-перегрузок). Плюс к тому не будет работать автоматический вывод типа (для обращения к самому классу, не для обращения к статическому методу), а значит сокращения писанины не будет. Т.е. это станет ну совсем уж бессмысленным. А так - в отдельном классе-фабрике хоть минимальная польза будет


------------------
WBR, Igor
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 3 (Гостей: 3)

© 2000-2024 Fox Club 
Яндекс.Метрика