通过MemberExpression获取属性类型

Sae*_*eid 17 c# expression properties c#-4.0

在这里问类似的问题 ,假设这种类型:

 public class Product {

public string Name { get; set; }
public string Title { get; set; }
public string Category { get; set; }
public bool IsAllowed { get; set; }

}
Run Code Online (Sandbox Code Playgroud)

这个使用MemberExpression:

public class HelperClass<T> {

    public static void Property<TProp>(Expression<Func<T, TProp>> expression) {

        var body = expression.Body as MemberExpression;

        if(body == null) throw new ArgumentException("'expression' should be a member expression");

        string propName = body.Member.Name;
        Type proptype = null;

    }

}
Run Code Online (Sandbox Code Playgroud)

我这样使用它:

HelperClass<Product>.Property(p => p.IsAllowed);
Run Code Online (Sandbox Code Playgroud)

HelperClass我只需要属性名称(在此示例中IsAllowed)和属性类型(在此示例中Boolean)所以我可以获取属性名称,但我无法获取属性类型.我在调试中看到了属性类型,如下图所示:

在此输入图像描述

那么你有什么建议来获得房产类型?

Tre*_*ley 27

尝试投射body.MemberPropertyInfo

public class HelperClass<T>
{
    public static void Property<TProp>(Expression<Func<T, TProp>> expression)
    {
        var body = expression.Body as MemberExpression;

        if (body == null)
        {
            throw new ArgumentException("'expression' should be a member expression");
        }

        var propertyInfo = (PropertyInfo)body.Member;

        var propertyType = propertyInfo.PropertyType;
        var propertyName = propertyInfo.Name;
    }
}
Run Code Online (Sandbox Code Playgroud)