Question

J'ai vu de nombreuses descriptions du fonctionnement des types anonymes, mais je ne suis pas sûr de leur utilité réelle.Quels sont les scénarios pour lesquels les types anonymes peuvent être utilisés dans un programme bien conçu ?

Était-ce utile?

La solution

Les types anonymes n'ont rien à voir avec la conception des systèmes ni même au niveau de la classe.Il s'agit d'un outil que les développeurs peuvent utiliser lors du codage.

Je ne traite même pas les types anonymes comme des types en soi.Je les utilise principalement comme tuples anonymes au niveau de la méthode.Si j'interroge la base de données puis manipule les résultats, je préfère créer un type anonyme et l'utiliser plutôt que de déclarer un tout nouveau type qui ne sera jamais utilisé ou connu en dehors du cadre de ma méthode.

Par exemple:

var query = from item in database.Items
            // ...
            select new { Id = item.Id, Name = item.Name };

return query.ToDictionary(item => item.Id, item => item.Name);

Personne ne se soucie du type anonyme.C'est là pour que vous n'ayez pas à déclarer une autre classe.

Autres conseils

De LINQ en action (page 76 section 2.6.3) :

...les types anonymes [sont] un excellent outil pour des résultats temporaires simples et rapides.Nous n'avons pas besoin de déclarer des classes pour contenir des résultats temporaires grâce aux types temporaires.

fondamentalement, ils sont utiles pour conserver temporairement des informations à portée locale.Tout ce qui dépasse nécessite la réflexion et peut devenir un véritable problème.L'exemple qu'ils donnent dans le livre cité ci-dessus est écrit pour consoler l'identifiant, le nom et la quantité de mémoire occupée par chaque processus en cours d'exécution.Ils créent un type anonyme, l'ajoutent à une liste (une seule instruction), puis utilisent ObjectDumper pour le générer.Par conséquent, le code n'a plus besoin d'une classe déclarée séparément pour contenir l'identifiant, le nom et la mémoire utilisée, mais tout est déclaré implicitement, ramenant le nombre de lignes à 4 :

var pl = new List<Object>();
foreach(var p in Process.GetProcesses())
  pl.Add(new {p.Id, p.ProcessName, Memory=p.WorkingSet64});
ObjectDumper.Write(pl);

L'utilisation la plus courante des types anonymes consiste à spécifier des projections dans une requête LINQ to SQL.

Cette requête

from x in db.Table1 select new {x.Column1, Alias2=x.Column2}

sera converti en ce SQL :

SELECT Column1, Column2 AS Alias2 FROM Table1

Avec les types anonymes, vous pouvez créer des projections ad hoc sans définir au préalable le type.Le compilateur définira le type pour vous.

Lorsque vous créez des types à des fins « Utiliser et lancer ».Cela semble être dû à LINQ.Cela semble être un moyen de créer des structures avec des champs à la volée pour une requête LINQ.Renvoie une structure/type avec les champs spécifiés uniquement.Sans cela, vous devrez déclarer un type .Net pour chaque combinaison unique de champs que vous souhaitez récupérer.

Utilisez-les avec Linq.

Il est important de savoir que LINQ ne vous oblige pas à utiliser des types anonymes.Vous pouvez également écrire des constructions d'objets normales après la sélection.

var query = from item in database.Items
// ...
select new Person(item.id, item.Name)

Cela vous évite une programmation de réflexion laide.

@Wouter :

var query = from item in database.Items
select new Person
{
ID =item.id,
NAME= item.Name
};

où ID et NAME sont la propriété réelle de votre classe Person.

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