J’ai besoin de détecter si un object a été créé anonymement comme new {name = value,}
si c’est un AnonymousType, il faut append ses propriétés noms / valeurs dans un
Dictionary
Voici ce que j’ai moi-même piraté:
var name="name"; var obj = new { name = new object(), }; var lookup = new Dictionary(); if(obj.GetType().Name.StartsWith("f__AnonymousType")) { foreach (var property in obj.GetType().GetProperties()) { lookup[property.Name] = property.GetValue(obj, null); } } else { lookup[name]=obj; }
Je me demandais s’il existait un moyen meilleur / plus rapide de détecter AnonymousTypes ou s’il existait un moyen plus rapide / meilleur de vider les noms / valeurs de propriétés d’un object dans un fichier.
Dictionary
Pour obtenir toutes les propriétés d’un object, avec ses valeurs, dans un Dictionary
, vous pouvez coupler la puissance de Linq avec les objects avec reflection.
Vous pouvez utiliser la méthode Enumerable.ToDictionary :
var dic = obj.GetType() .GetProperties() .ToDictionary(p => p.Name, p=> p.GetValue(obj, null));
Cela vous retournera un Dictionary
.
Utilisez la nouvelle syntaxe d’initialiseur d’object de collection au lieu d’un type anonyme:
var obj = new Dictionary() { { "Name", t.Name }, { "Value", t.Value } };
Détecter un type anonyme est un peu difficile; Cela dépend de la langue! Les types anonymes VB n’ont pas le même aspect que les types anon C #. Je serais méfiant à propos de la logique qui agit différemment selon les types. Vous pouvez vérifier [ComstackrGenerated]
, mais notez que cela ne signifie pas seulement “type anonyme” – il y en a d’autres qui le font.
Personnellement, je ne distinguerais pas dans ce scénario.