Quelle est la différence entre un type anonyme et un tuple?Type et tuple anonymes
Répondre
Les types anonymes ont des noms de propriété qui contiennent plus d'informations, pour les tuples vous ne l'avez pas. Vous ne pouvez pas utiliser les types anonymes comme valeurs et paramètres de retour et vous pouvez le faire avec des tuples.
Un exemple de quand un tuple est agréable est quand vous voulez retourner plusieurs valeurs. @Petar Minchev mentions this link qui donne un bon exemple.
Vous souhaiterez peut-être une méthode Find()
qui renvoie à la fois un index et la valeur. Un autre exemple serait la position dans un plan 2D ou 3D.
Un tuple n'est pas un type anonyme, c'est un type nommé. Vous pouvez l'utiliser comme argument de type ou de méthode de retour. Ce code est valable:
Tuple<int, string> GetTuple()
{
return Tuple.Create(1, "Bob");
}
Vous ne pouvez pas le faire avec un type anonyme, vous devez retourner System.Object
à la place. En général, vous devez utiliser Reflection sur ces objets (ou dynamic
dans .NET 4) afin d'obtenir les valeurs des propriétés individuelles.
En outre, comme mentionne Brian, les noms de propriété sur un Tuple
sont fixés - ils sont toujours Item1
, Item2
, Item3
et ainsi de suite, alors qu'avec un type anonyme vous pouvez choisir les noms. Si vous écrivez:
var x = new { ID = 1, Name = "Bob" }
Ensuite, le type anonyme a fait ID
et Name
propriétés. Mais si vous écrivez:
Tuple.Create(1, "Bob")
Puis le tuple résultant a juste propriétés Item1
et Item2
.
Un autre point en faveur des types anonymes serait que vous pouvez facilement avoir plus de 8 propriétés. Bien que ce soit faisable en utilisant des tuples, ce n'est pas si joli.
var tuple = Tuple.Create(1, 2, 3, 4, 5, 6, 7, Tuple.Create(8, 9)); //and so on
ou d'écrire vos propres classes de tuple.
Une similitude intéressante à noter est que les deux tuples et des types anonymes vous donnent immuabilité et la comparabilité de l'égalité (les deux remplacements Equals
et GetHashCode
) en fonction des propriétés par défaut.
Juste une petite mise à jour de cette réponse puisque C# 7 est sorti dans la nature. Les tuples ont maintenant de super pouvoirs et peuvent parfois remplacer des types et des classes anonymes. Prenons par exemple cette méthode qui accepte et renvoie des tuples avec des propriétés nommées.
void Main()
{
var result = Whatever((123, true));
Debug.Assert(result.Something == 123);
Debug.Assert(result.Another == "True");
}
(int Something, string Another) Whatever((int Neat, bool Cool) data)
{
return (data.Neat, data.Cool.ToString());
}
C'est cool.
- 1. Types et génériques anonymes
- 2. Méthodes et types anonymes
- 3. Types WCF et anonymes
- 4. Java Dictionnaire valeur de type tuple
- 5. problème de type en incluant tuple
- 6. Méthodes et délégués anonymes
- 7. C# liste tuple anonyme
- 8. Classes anonymes, données temporaires et collections de classes anonymes
- 9. C# et tableaux d'objets anonymes
- 10. Type de retour Scala pour les fonctions de tuple
- 11. fonctions anonymes et des cartes dans Scala
- 12. Types anonymes et JsonResult dans ASP.NET MVC
- 13. Méthodes anonymes avec le type de retour dans .Net
- 14. MEDIA_URL tuple
- 15. python division tuple
- 16. Interfaces, méthodes anonymes et fuites de mémoire
- 17. Bug avec tuple et vues typées?
- 18. déclaration de paramètre Tuple et l'affectation bizarrerie
- 19. Tuple Comparaison
- 20. Génériques et type anonyme
- 21. Java: énumérations anonymes?
- 22. Silverlight appels asynchrones et des méthodes anonymes
- 23. Ajout et suppression de gestionnaire d'événements anonymes
- 24. Types clonés anonymes?
- 25. Ajouter un autre tuple à un tuple de tuples
- 26. Tuple to string
- 27. Itère et la création de nouveaux types anonymes dynamiquement
- 28. tuple python à dict
- 29. Comment uniqufy l'élément tuple?
- 30. Groupement liste tuple Python
Voici un article expliquant ce que vous voulez: http://msdn.microsoft.com/en-us/vcsharp/ee957397.aspx –