Question

J'ai essayé de me familiariser avec certaines des nouvelles fonctionnalités de C # et l'une d'entre elles que je n'ai pas eu l'occasion d'utiliser est celle des types anonymes.

Je comprends l'utilisation des requêtes LINQ et j'ai consulté cet article SO qui posait une question similaire. La plupart des exemples que j'ai vus sur le net sont liés aux requêtes LINQ, ce qui est cool. J'ai vu des exemples quelque peu artificiels aussi mais pas vraiment n'importe quoi où j'ai vu beaucoup de valeur.

Avez-vous une nouvelle utilisation pour les types anonymes où vous pensez que cela vous fournit vraiment une utilité?

Était-ce utile?

La solution

Avec un peu de réflexion, vous pouvez transformer un type anonyme en dictionnaire < chaîne, objet > ;; Roy Osherove a écrit sa technique pour cela ici: http://weblogs.asp.net/rosherove/archive/2008/03/11/turn-anonymous-types-into-idictionary-of-values.aspx

Jacob Carpenter utilise des types anonymes pour initialiser des objets immuables avec une syntaxe similaire à celle d’initialisation d’objet: http://jacobcarpenter.wordpress.com/2007/11/19/named-parameters-part-2/

Les types anonymes peuvent être utilisés pour donner des alias plus faciles à lire aux propriétés des objets d'une collection itérée avec une instruction foreach. (Bien que, pour être honnête, ce n’est vraiment rien de plus que l’utilisation standard de types anonymes avec LINQ to Objects .) Par exemple:

Dictionary<int, string> employees = new Dictionary<int, string>
{
    { 1, "Bob" },
    { 2, "Alice" },
    { 3, "Fred" },
};

// standard iteration
foreach (var pair in employees)
    Console.WriteLine("ID: {0}, Name: {1}", pair.Key, pair.Value);

// alias Key/Value as ID/Name
foreach (var emp in employees.Select(p => new { ID = p.Key, Name = p.Value }))
    Console.WriteLine("ID: {0}, Name: {1}", emp.ID, emp.Name);

Bien qu'il n'y ait pas beaucoup d'amélioration dans cet exemple, si la boucle ID était plus longue, faire référence à Name et <=> pourrait améliorer la lisibilité.

Autres conseils

Le routage ASP.NET MVC utilise ces objets partout.

Parfois, je soupçonne qu'il peut être utile d'effectuer quelque chose qui ressemble à une requête LINQ, sans pour autant utiliser LINQ, mais vous souhaitez tout de même une projection. Je ne pense pas que j'utiliserais des types anonymes dans leur forme actuelle pour quelque chose de radicalement différent des projections LINQ.

Une chose que je voudrais voir, c’est la possibilité de créer & "nommé &"; types avec des déclarations simples, qui généreraient les propriétés et le constructeur de la même manière que pour les types anonymes, ainsi que redéfinir Equals / GetHashCode / ToString de la même manière (utile). Ces types pourraient ensuite être convertis en & Quot; normal & Quot; les types lorsque le besoin d'ajouter plus de comportement est apparu.

Encore une fois, je ne pense pas que je l’utiliserais très souvent - mais de temps en temps, cette capacité serait utile, en particulier avec quelques méthodes d’un cours. Cela pourrait peut-être faire partie d'un effort plus vaste visant à apporter davantage de soutien aux types immuables en C # 5.

Pour ajouter à ce que dit Justice, ASP.Net MVC est le premier endroit où je les ai utilisées de manière intéressante et utile. Voici un exemple:


Html.ActionLink("A Link", "Resolve", new { onclick = "someJavascriptFn();" })

ASP.Net MVC utilise des types anonymes comme celui-ci pour ajouter des attributs arbitraires aux éléments HTML. Je suppose qu'il y a différentes façons de réaliser la même chose, mais j'aime bien le style concis des types anonymes, cela donne une impression de langage dynamique.

La principale utilisation des types anonymes est LINQ. C’est pourquoi il a été créé.

Je suppose qu'une des raisons pour un type anonyme en dehors de linq est de créer un objet temporaire de type struct, par exemple:

var x = new { a = 1, b = 2 };

Cela peut vous faciliter la vie dans certaines situations.

Je les ai utilisés pour la création d'emails basés sur un modèle car ils sont parfaits si vous utilisez des réflexions et des génériques.

Vous trouverez quelques informations ici: http: //www.aaron- powell.com/blog.aspx?id=1247

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top