c#PropertyInfo提取内部表达式

时间:2017-04-06 13:27:55

标签: c# reflection expression

我必须使用反射来循环反射对象的某些属性,并收集它们的PropertyInfo个对象。

其中一些属性属于Expression<Func<Type1,string>>类型,我必须从属性信息中提取基础表达式。

我试过了myPropertyInfo.GetValue(parParameter) as LambdaExpression,但似乎没有用。

任何人都可以给我一些指示吗?

1 个答案:

答案 0 :(得分: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());
    }
}