Anonyme de type et de tuple
Quelle est la différence entre un type anonyme et tuple?
- Voici un article expliquant ce que vous voulez: msdn.microsoft.com/en-us/vcsharp/ee957397.aspx
Vous devez vous connecter pour publier un commentaire.
Quelle est la différence entre un type anonyme et tuple?
Vous devez vous connecter pour publier un commentaire.
Les types anonymes ont bien des noms qui portent plus d'informations, pour les n-uplets vous ne l'avez pas. Vous ne pouvez pas utiliser les types anonymes comme valeurs de retour et des paramètres bien et que vous pouvez avec des n-uplets.
Par exemple, si un tuple est agréable, c'est quand vous voulez renvoyer plusieurs valeurs. @Petar Minchev mentionne ce lien qui donne un bon exemple.
Vous voudrez peut-être un
Find()
méthode qui renvoie à la fois un indice et la valeur. Un autre exemple serait la position en 2d ou 3d de l'avion.Juste une petite mise à jour pour cette réponse depuis C# 7 est dans la nature. Les Tuples avoir des super pouvoirs et peut parfois remplacer anonyme des types et des classes. Prenez l'exemple de cette méthode qui accepte et renvoie les tuples avec les propriétés nommées.
C'est cool.
Un tuple n'est pas un type anonyme, c'est un type nommé. Vous pouvez l'utiliser comme un type de retour ou un argument de méthode. Ce code est valide:
Vous ne pouvez pas faire cela avec un type anonyme, vous devez retourner
System.Object
à la place. Généralement, vous finissez par avoir à utiliser la Réflexion sur ces objets (oudynamic
dans .NET 4) afin d'obtenir les valeurs de propriétés individuelles.Aussi, comme Brian mentionne les noms de propriété sur un
Tuple
sont fixes, ils sont toujoursItem1
,Item2
,Item3
et ainsi de suite, alors qu'avec un type anonyme, vous aurez à choisir les noms. Si vous écrivez:L'anonyme de type a en fait
ID
etName
propriétés. Mais si vous écrivez:Alors la résultante tuple juste a des propriétés
Item1
etItem2
.Item1
,Item2
" n'est plus approprié avec C# 7. Voir @alex-dresko réponse ci-dessus.Un autre point en faveur de types anonymes est que vous pouvez facilement avoir plus de 8 propriétés. Alors que c'est faisable à l'aide de n-uplets, il n'est pas si joli.
ou écrire votre propre tuple classes.
Une similitude intéressante à noter est que les deux tuples et les types anonymes vous donner de l'immutabilité et de l'égalité et de la comparabilité (les deux remplacements
Equals
etGetHashCode
) basée sur les propriétés par défaut.