Je suis en train d'analyser un arbre d'expression. Étant donné un NodeType d'ExpressionType.MemberAccess, comment obtenir la valeur de ce champ? A partir de C# MSDN docs: MemberAccess est un nœud qui représente la lecture d'un champ ou d'une propriété.Étant donné un type ExpressionType.MemberAccess, comment puis-je obtenir la valeur du champ?
Un extrait de code serait incroyablement, incroyablement utile. Merci d'avance!!!
Mon code ressemble à ceci:
public static List<T> Filter(Expression<Func<T, bool>> filterExp)
{
//the expression is indeed a binary expression in this case
BinaryExpression expBody = filterExp.Body as BinaryExpression;
if (expBody.Left.NodeType == ExpressionType.MemberAccess)
//do something with ((MemberExpressionexpBody.Left).Name
//right hand side is indeed member access. in fact, the value comes from //aspdroplist.selectedvalue
if (expBody.Right.NodeType == ExpressionType.MemberAccess)
{
//how do i get the value of aspdroplist.selected value?? note: it's non-static
}
//return a list
}
Merci beaucoup Marc. La valeur de la propriété .Expression est ... quelque chose de plus intéressant: \t {value (ASP.usercontrols_mycontro_ascx) .controlname} –
Je fais beaucoup avec les génériques et la réflexion donc récupérer la valeur via propertyinfo/fieldinfo ne fonctionne pas parce que je Je ne suis pas sûr d'où tirer l'objet de référence de ... puis-je tirer cela de memberexpression ou methodinfo? –
Cela fonctionnera ... mais le problème est que vous devez évaluer le.Expression en tant que valeur à fournir en tant que "obj" pour FieldInfo/PropertyInfo. Ne pouvez-vous pas simplement utiliser .Compile() et exécuter le lambda en tant que délégué? Beaucoup plus facile que l'analyse syntaxique ... –