Personalmente, trovo che le tuple siano una parte iterativa dello sviluppo quando sei in un ciclo investigativo, o semplicemente "giocando". Poiché una tupla è generica, tendo a pensarci quando lavoro con parametri generici, specialmente quando voglio sviluppare una parte di codice generica e sto iniziando dalla fine del codice, invece di chiedermi "come vorrei questa chiamata guardare?".
Molto spesso mi rendo conto che la raccolta che forma la Tupla diventa parte di una lista, e fissare List> non esprime realmente l'intenzione della lista, o come funziona. Spesso "convivo" con esso, ma mi ritrovo a voler manipolare l'elenco e cambiare un valore - a quel punto, non voglio necessariamente creare una nuova tupla per quello, quindi ho bisogno di creare la mia classe o struttura per tenerlo, così posso aggiungere il codice di manipolazione.
Ovviamente ci sono sempre metodi di estensione, ma molto spesso non si desidera estendere quel codice extra a implementazioni generiche.
Ci sono state volte in cui volevo esprimere i dati come una tupla e non avevo tuple disponibili. (VS2008), nel qual caso ho appena creato la mia classe Tuple e non la rendo thread-safe (immutabile).
Quindi immagino di essere dell'opinione che le tuple siano una programmazione pigra a scapito della perdita di un nome di tipo che ne descriva lo scopo. L'altra spesa è che devi dichiarare la firma della tupla ovunque sia usata come parametro. Dopo una serie di metodi che iniziano a sembrare gonfi, potresti sentire come me che vale la pena creare una classe, poiché ripulisce le firme dei metodi.
Tendo a iniziare con la classe come membro pubblico della classe in cui stai già lavorando. Ma nel momento in cui si estende oltre una semplice raccolta di valori, ottiene il suo file e lo sposto dalla classe contenente.
Quindi, in retrospettiva, credo di usare le tuple quando non voglio uscire e scrivere una lezione, e voglio solo pensare a quello che sto scrivendo in questo momento. Il che significa che la firma della tupla può cambiare parecchio nel testo mezz'ora mentre cerco di capire di quali dati avrò bisogno per questo metodo e come restituirà i valori che restituirà.
Se ho la possibilità di effettuare il refactoring del codice, spesso metto in dubbio il posto di una tupla al suo interno.