从表达式获取模型类型

时间:2017-07-26 11:18:40

标签: c# .net reflection system.reflection

我试图使用反射来获取模型类型。到目前为止,我能够得到这种类型的财产。但是当我尝试使用表达式来获取模型类型时,我得到了该属性的空引用。

表达式就是这样,

model => model.property

并且在功能上,

//I'm passing model as a parameter
MemberExpression expBody = expression.Body as MemberExpression;
model.GetType().GetProperty(expBody.Member.Name.ToString()));

是否可以做这样的事情?

MemberExpression expBody = expression.Body as MemberExpression;
    expBody.Type.GetProperty(expBody.Member.Name.ToString()));

我试过了,但没有工作。

2 个答案:

答案 0 :(得分:1)

如果您想获得模型的类型,请执行以下操作:

MemberExpression expbody = expression.Body as MemberExpression;
Type modelType = expbody.Expression.Type;

答案 1 :(得分:0)

如果我们假设您的expression是一个lambda表达式,其参数是模型,则以下内容会产生您期望的行为:

Expression<Func<Model, string>> expression = model => model.SomeStringProperty;
Type modelType = expression.Parameters[0].Type;
MemberExpression expBody = expression.Body as MemberExpression;
PropertyInfo p = modelType.GetProperty(expBody.Member.Name);

Assert.NotNull(p);

请注意,modelType.GetProperty(expBody.Member.Name)完全没必要。最好从MemberExpression本身中提取成员,以避免含糊不清:

PropertyInfo p = (PropertyInfo)expBody.Member;