2017-04-06 52 views
0

我必須使用反射來循環反射對象的某些屬性,並收集它們的PropertyInfo對象。c#PropertyInfo提取內部表達式

其中一些屬性的類型爲Expression<Func<Type1,string>>,我必須從屬性信息中提取基礎表達式。我試過myPropertyInfo.GetValue(parParameter) as LambdaExpression,但它似乎沒有工作。

任何人都可以給我一些指針嗎?

+0

可能你可以把'dynamic'用在這裏很好用嗎? – Fabjan

+3

請顯示您目前爲止的代碼,以便更容易地查看問題的發生位置。你知道編譯時'Type1'和'string'的類型嗎?我不確定,但我認爲從表達式>不是'LambdaExpresssion'_。你想用這個價值做什麼? –

回答

3

您對myPropertyInfo.GetValue(parParameter) as LambdaExpression的使用是可疑的,因爲參數和表達式是兩個不同的東西。看起來你在做反思之後混合了你的變量。下面是一個可能有助於澄清事情的例子:

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()); 
    } 
}