Estoy analizando un árbol de expresiones. Dado un NodeType de ExpressionType.MemberAccess, ¿cómo obtengo el valor de ese campo?Dado un tipo ExpressionType.MemberAccess, ¿cómo obtengo el valor del campo?
De C# MSDN documentos: MemberAccess es un nodo que representa la lectura de un campo o propiedad.
Un fragmento de código sería increíblemente útil. ¡¡¡Gracias por adelantado!!!
Mi código es como la siguiente:
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
}
Muchas gracias Marc. El valor de la propiedad .Expression es ... algo más interesante: \t {value (ASP.usercontrols_mycontro_ascx) .controlname} –
estoy haciendo mucho con genéricos y reflexión, por lo que recuperar el valor a través de propertyinfo/fieldinfo no funciona porque No estoy seguro de dónde sacar el objeto de referencia ... ¿puedo extraerlo de memberexpression o methodinfo? –
Funcionará ... pero el problema es que necesita evaluar el.Expresión como un valor para alimentar como el "obj" para FieldInfo/PropertyInfo. ¿No puedes simplemente usar .Compile() y ejecutar el lambda como un delegado? Mucho más fácil que analizar ... –