通过 MemberExpression 获取属性类型

21

我在这里提出了类似的问题(链接),假设这个类型:

 public class Product {

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

}

还有这个使用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;

    }

}

我这样使用它:
HelperClass<Product>.Property(p => p.IsAllowed);

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

enter image description here

那么,您有什么建议来获取属性类型?
1个回答

39
尝试将 body.Member 转换为 PropertyInfo
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;
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接