Je dois détecter si un objet a été créé anonymement comme neuf {nom = valeur,}
S'il s'agit d'un anonymoustype, il devrait ajouter des noms de propriétés / valeurs de ses propriétés dans un p> C'est ce que j'ai piraté ensemble moi-même: P> Dictionary<string,object>
3 Réponses :
Utilisez la nouvelle syntaxe d'initialisateur d'objet de collection au lieu d'un type anonyme:
La détection d'un type anonyme est un petit em> dur; Pas au moins cela dépend de la langue! VB Anon-Types Ne regardez pas la même chose que c # anon-types. Je serais douteux de la logique que les actes varient différemment sur des types d'anon. Vous pouvez vérifier Personnellement, je ne distinguerais pas ce scénario. P> [compilergénéché] code>, mais notez qu'il ne veut pas dire "type anonyme" - il y en a d'autres qui font cela. P>
Pour obtenir toutes les propriétés d'un objet, avec ses valeurs dans un dictionnaire Vous pouvez utiliser le Enumérable.ToDictionary Méthode: P> code>, vous pouvez coupler la puissance de LINQ aux objets avec réflexion. var dic = obj.GetType()
.GetProperties()
.ToDictionary(p => p.Name, p=> p.GetValue(obj, null));
Le problème est s'il ne peut qu'utiliser le dictionnaire en premier lieu, il serait énormément plus rapide sauf si Linq fait de la mise en cache folle sur cette requête, auquel cas il serait «seulement» être mesurablement plus rapide.
Et si je vois des propriétés "intrinsèques" comme "genericequalitycomerer", plutôt que des propriétés que j'ai explicitement déclarées? J'ai essayé getProperties (controlingflags.declaredonly) code>.
Weird, Nevermind - J'ai constaté que la méthode utilisant cette réflexion (elle-même dans une extension d'objet) s'est terminée en s'appuyant sur le résultat converti. Mon extension était donc appelée à un objet, puis sur le dictionnaire résultant.
Qu'essayez-vous d'accomplir cela? Quoi qu'il en soit, il doit y avoir une meilleure façon de le faire.