Je voudrais implémenter une méthode qui me permet d'accéder à une propriété d'un objet inconnu/anonyme (-graph) de manière tardive/dynamique (je ne sais même pas comment l'appeler correctement).Comment accéder aux propriétés dynamiquement/en retard?
Voici un exemple de ce que je voudrais obtenir:
// setup an anonymous object
var a = new { B = new { C = new { I = 33 } } };
// now get the value of a.B.C.I in a late-bound way
var i = Get(a, "B.C.I");
Et voici une implémentation simple utilisant la réflexion « classique »:
public static object Get(object obj, string expression)
{
foreach (var name in expression.Split('.'))
{
var property = obj.GetType().GetProperty(name);
obj = property.GetValue(obj, null);
}
return obj;
}
Quelles autres options dois-je avec C#/.NET 4 pour mettre en œuvre quelque chose de similaire à celui montré ci-dessus, mais peut-être plus simple, plus performant, etc.?
Peut-être y a-t-il des façons de réaliser la même chose, ce qui me permettrait de spécifier expression
en utilisant une expression lambda au lieu d'une chaîne? Les arbres d'expression seraient-ils utiles de quelque manière que ce soit (par exemple, comme indiqué dans this question)?
Mise à jour: l'objet et l'expression sont passés dans mon code via un appel de service Web. C'est pourquoi j'ai utilisé object
et string
dans ma méthode Get()
.
Désolé, je n'étais pas clair. J'ai mis à jour la question. – M4N