C # Détecter AnonymousType new {nom = valeur} et convertir en Dictionnaire

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.