Persönlich finde ich, dass Tupel ein iterativer Teil der Entwicklung sind, wenn Sie sich in einem Untersuchungszyklus befinden oder einfach nur "spielen". Da ein Tupel generisch ist, denke ich eher daran, wenn ich mit generischen Parametern arbeite - insbesondere, wenn ich einen generischen Code entwickeln möchte, und ich beginne am Codeende, anstatt mich zu fragen, wie mir dieser Aufruf gefallen würde sehen?".
Sehr oft stelle ich fest, dass die Sammlung, die die Tupelformulare bilden, Teil einer Liste wird, und wenn ich auf Liste> starre, drückt dies nicht wirklich die Absicht der Liste aus oder wie sie funktioniert. Ich "lebe" oft damit, möchte aber die Liste manipulieren und einen Wert ändern. An diesem Punkt möchte ich nicht unbedingt ein neues Tupel dafür erstellen, daher muss ich meine eigene Klasse oder Struktur erstellen um es zu halten, damit ich Manipulationscode hinzufügen kann.
Natürlich gibt es immer Erweiterungsmethoden - aber oft möchten Sie diesen zusätzlichen Code nicht auf generische Implementierungen erweitern.
Es gab Zeiten, in denen ich Daten als Tupel ausdrücken wollte und keine Tupel zur Verfügung hatte. (VS2008) In diesem Fall habe ich gerade meine eigene Tuple-Klasse erstellt - und ich mache sie nicht threadsicher (unveränderlich).
Ich bin also der Meinung, dass Tuples faul programmieren, wenn ein Typname verloren geht, der seinen Zweck beschreibt. Der andere Aufwand besteht darin, dass Sie die Signatur des Tupels dort deklarieren müssen, wo es als Parameter verwendet wird. Nach einer Reihe von Methoden, die aufgebläht aussehen, haben Sie vielleicht das Gefühl, dass es sich lohnt, eine Klasse zu erstellen, da sie die Methodensignaturen bereinigt.
Ich beginne damit, dass die Klasse ein öffentliches Mitglied der Klasse ist, in der Sie bereits arbeiten. In dem Moment, in dem sie über eine Sammlung von Werten hinausgeht, erhält sie eine eigene Datei und verschiebt sie aus der enthaltenen Klasse.
Rückblickend glaube ich, dass ich Tupel benutze, wenn ich nicht losgehen und eine Klasse schreiben möchte und nur darüber nachdenken möchte, was ich gerade schreibe. Dies bedeutet, dass sich die Signatur des Tupels im Text eine halbe Stunde lang stark ändern kann, während ich herausfinde, welche Daten ich für diese Methode benötige und wie sie die zurückgegebenen Werte zurückgibt.
Wenn ich die Möglichkeit habe, Code umzugestalten, frage ich oft nach dem Platz eines Tupels darin.