Comment est un tuple différent d'une classe? Au lieu du code suivant, nous pouvons faire une classe avec 3 champs et en faire des objets. Comment se passe ce tuple différent de cela? Est-ce que cela ne réduit que le code que nous écrivons ou a-t-il quelque chose à faire avec la vitesse également, étant donné que vous ne pouvez pas changer les articles dans un tuple.
4 Réponses :
vous devrait em> faire des cours à la place afin que votre code soit plus lisible / maintenu. Sa fonction principale est la «solution rapide» lorsque vous souhaitez associer des pièces de données sans faire de classe pour les maintenir. P> tuple code> est em> une classe. Celui qui détient toutes les données que vous souhaitez (dans des propriétés terriblement nommées comme
item1 code>). P>
D'accord, vous ne devriez généralement pas les utiliser. Pour les variables locales, vous pouvez utiliser des types anonymes. Pour des trucs qui sont passés autour, il vaut mieux créer des types distincts.
Cela vous évite de définir une nouvelle classe avec des propriétés personnalisées. P>
It est em> définir l'égalité par la valeur des trois éléments, ce qui est quelque chose qu'une classe Bare-Bones ne ferait pas de codage personnalisé. Cela plus le fait que c'est immuable en fait un candidat raisonnable pour une clé de hasch dans un dictionnaire Un inconvénient est que les propriétés sont la vanille code>. P>
item1 code>,
item2 code>, etc., de sorte qu'ils ne fournissent aucun contexte aux valeurs d'eux, où des propriétés comme < code> ID code>,
nom code>,
âge code> serait. P>
N'aurait pas pensé à eux comme un bon dictionnaire code> clé code>. Bien sûr, vous devez faire un nouveau i> un pour le comparer contre ...
Un tuple code> contenant des types de valeur est en fait incroyablement pauvre à utiliser comme clé due au fait que le
gethascode code> et
est égal à code> boîte de mise en œuvre chacune des valeurs contient! Voir Cette question pour des informations supplémentaires.
@Lukazoid Fair Point, mais je comparais la pratique i> de l'utiliser comme clé par rapport à la performance i>. Ce n'est certainement pas le plus performant, mais «incroyablement pauvre» est une exagération imho. Il peut ne pas être significatif en fonction de l'utilisation.
@Dstanley qui était une mauvaise signature de ma part, ce que je voulais dire était la mise en œuvre de ces méthodes sur tuple code> est incroyablement pauvre imo et, par conséquent, il n'est pas toujours un choix idéal pour
Dictionnaire < / code> clés. J'accepte parfois qu'il est insignifiant mais je crois aussi que cela vaut la peine d'être souligné car il y a des cas, il peut avoir un impact non négligeable.
Les tuples sont à mon avis une invitation à une mauvaise modélisation de données. Au lieu de créer un modèle approprié, vous obtenez un objet générique pouvant contenir des propriétés d'article. La nommée est très générique aussi .. Item1..itemn P>
Je suppose qu'ils ont eu un sens pour des objets de courte durée avant l'invention des types anonymes.
@Jonathanallen sauf que les types anonymes ont été environ plus longtemps que tuple code>.
Oui, cela met une ride dans l'histoire.
Vous utilisez des tuples comme moyen de transmettre des données entre l'appel de la méthode sans avoir à définir une nouvelle classe. Utilisez généralement pour renvoyer plusieurs données de données à partir d'une méthode plutôt que d'utiliser des paramètres «OUT». P>
Gardez à l'esprit que le paramètre OUT ne peut pas utiliser des méthodes asynchronisées / attendre, c'est là que les tuples sont utiles. P>
Vous voulez probablement définir une classe pour vos données si vous codez une bibliothèque de classe réutilisable cependant. Cependant, tuple est excellent dans la couche de présentation. P>
Peut-être que la peine de mentionner, les propriétés ne sont que des getters, vous ne pouvez donc pas les changer après que vous les avez créés.
Il convient de noter que les tuples sont de beaucoup i> plus utilitaire en F #, où la correspondance des motifs est une grande partie de la langue, et la syntaxe est construite autour du concept: msdn.microsoft.com/en-us/library/dd233200.aspx .