Лично я считаю, что кортежи являются итеративной частью разработки, когда вы находитесь в исследовательском цикле или просто «играете». Поскольку кортеж является универсальным, я склонен думать об этом при работе с универсальными параметрами - особенно когда я хочу разработать общий фрагмент кода, и я начинаю с конца кода, вместо того чтобы спрашивать себя: «Как бы мне понравился этот вызов? смотреть?".
Довольно часто я понимаю, что коллекция, которую формирует Tuple, становится частью списка, и взгляд на List> на самом деле не выражает намерения списка или того, как он работает. Я часто «живу» с этим, но обнаруживаю, что хочу манипулировать списком и изменять значение - в этот момент я не обязательно хочу создавать для этого новый кортеж, поэтому мне нужно создать свой собственный класс или структуру. чтобы удерживать его, поэтому я могу добавить код манипуляции.
Конечно, всегда есть методы расширения, но довольно часто вы не хотите распространять этот дополнительный код на общие реализации.
Были времена, когда я хотел выразить данные как кортеж, но не имел доступных кортежей. (VS2008) и в этом случае я только что создал свой собственный класс Tuple и не делаю его потокобезопасным (неизменяемым).
Итак, я полагаю, я придерживаюсь мнения, что кортежи - это ленивое программирование за счет потери имени типа, описывающего его назначение. Другой расход заключается в том, что вы должны объявить подпись кортежа, где бы он ни использовался в качестве параметра. После ряда методов, которые начинают выглядеть раздутыми, вы можете почувствовать, как и я, что стоит создать класс, поскольку он очищает сигнатуры методов.
Я обычно начинаю с того, что класс является публичным членом класса, в котором вы уже работаете. Но как только он выходит за рамки простого набора значений, он получает собственный файл, и я перемещаю его из содержащего класса.
Итак, оглядываясь назад, я считаю, что использую кортежи, когда не хочу уходить и писать класс, а просто хочу подумать о том, что я пишу прямо сейчас. Это означает, что подпись кортежа может довольно сильно измениться в тексте за полчаса, пока я выясняю, какие данные мне понадобятся для этого метода и как он возвращает те значения, которые он вернет.
Если у меня есть возможность провести рефакторинг кода, я часто сомневаюсь, что в нем находится кортеж.