代码之家  ›  专栏  ›  技术社区  ›  Prajwal

从表达式获取模型类型

  •  0
  • Prajwal  · 技术社区  · 7 年前

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

    表情是这样的,

    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 回复  |  直到 7 年前
        1
  •  1
  •   Ben    7 年前

    如果要获取模型的类型,只需执行以下操作:

    MemberExpression expbody = expression.Body as MemberExpression;
    Type modelType = expbody.Expression.Type;
    
        2
  •  0
  •   Kirill Shlenskiy    7 年前

    如果我们假设你的 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;