Ich analysiere einen Ausdrucksbaum. Bei einem NodeType von ExpressionType.MemberAccess, wie bekomme ich den Wert dieses Feldes?Bei einem Typ ExpressionType.MemberAccess, wie bekomme ich den Feldwert?
Von C# MSDN-Dokumentation: MemberAccess ist ein Knoten, der das Lesen aus einem Feld oder einer Eigenschaft darstellt.
Ein Code-Snippet wäre unglaublich, unglaublich hilfreich. Danke im Voraus!!!
Mein Code sieht in etwa wie folgt aus:
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
}
Vielen Dank Marc. Der Wert der Eigenschaft .Expression ist ... etwas interessanter: \t {Wert (ASP.usercontrols_mycontro_ascx) .controlname} –
Ich mache viel mit Generics und Reflexion, so dass das Abrufen des Wertes über propertinfo/fieldinfo nicht funktioniert, weil ich bin mir nicht sicher wo ich das referenzierende Objekt ziehen soll ... kann ich das von der memmerexpression oder methodinfo ziehen? –
Es wird funktionieren ... aber das Problem ist, dass Sie das bewerten müssen.Ausdruck als Wert, der als "obj" für FieldInfo/PropertyInfo eingegeben wird. Kannst du nicht einfach .Compile() verwenden und das Lambda als Delegat ausführen? Viel einfacher als das Parsen ... –