2017-04-06 3 views
0

Ich muss Reflektion verwenden, um durch einige Eigenschaften eines reflektierten Objekts zu durchlaufen und ihre PropertyInfo Objekte zu sammeln.C# PropertyInfo extract inner expression

Einige dieser Eigenschaften sind vom Typ Expression<Func<Type1,string>>, und ich muss den zugrunde liegenden Ausdruck aus der Eigenschaft Info extrahieren.

Ich versuchte myPropertyInfo.GetValue(parParameter) as LambdaExpression, aber es scheint nicht zu funktionieren.

Kann mir jemand ein paar Hinweise geben?

+0

Können Sie 'dynamische' zu ​​einem guten Gebrauch hier setzen? – Fabjan

+3

Bitte zeigen Sie den Code, den Sie bisher haben, so dass es einfacher ist zu sehen, wo das Problem auftritt. Kennen Sie die Typen 'Type1' und' string' zur Kompilierzeit? Ich bin mir nicht sicher, aber ich denke, ein 'Expression >' _ ist kein 'LambdaExpresssion'_ in Bezug auf Typen. Was möchtest du mit diesem Wert machen? –

Antwort

3

Ihre Verwendung von myPropertyInfo.GetValue(parParameter) as LambdaExpression ist verdächtig, weil Parameter und Ausdrücke zwei verschiedene Dinge sind. Es scheint, als würden Sie Ihre Variablen nach der Reflektion durcheinander bringen. Ist hier ein Beispiel, das helfen kann, Sachen zu klären:

class Type1 { public string Name { get; set; } } 
class Data { public Expression<Func<Type1, string>> Ex { get; set; } } 
class Program 
{ 
    static void Main(string[] args) 
    { 
     var d = new Data { Ex = t => t.Name }; 
     var pi = d.GetType().GetProperties().Single(); 
     var ex = pi.GetValue(d) as LambdaExpression; 
     Console.WriteLine(pi.GetValue(d).GetType()); 
     Console.WriteLine(ex); 
     Console.WriteLine(ex.Parameters.Single()); 
    } 
}