6
votes

Comment est un tuple différent d'une classe?

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. xxx


2 commentaires

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 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 .


4 Réponses :


10
votes

tuple est une classe. Celui qui détient toutes les données que vous souhaitez (dans des propriétés terriblement nommées comme item1 ).

vous devrait 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.


1 commentaires

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.



13
votes

Cela vous évite de définir une nouvelle classe avec des propriétés personnalisées.

It est 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 item1 , item2 , etc., de sorte qu'ils ne fournissent aucun contexte aux valeurs d'eux, où des propriétés comme < code> ID , nom , âge serait.


4 commentaires

N'aurait pas pensé à eux comme un bon dictionnaire clé . Bien sûr, vous devez faire un nouveau un pour le comparer contre ...


Un tuple contenant des types de valeur est en fait incroyablement pauvre à utiliser comme clé due au fait que le gethascode et est égal à 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 de l'utiliser comme clé par rapport à la performance . 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 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.



4
votes

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


3 commentaires

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 .


Oui, cela met une ride dans l'histoire.



1
votes

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».

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.

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.


0 commentaires