Get property type by MemberExpression

Обновить

November 2018

Просмотры

8k раз

15

Я спрашиваю подобный вопрос здесь , предположим , этот тип:

 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) Так что я могу получить имя свойства , но я не могу получить тип недвижимости. Я вижу , тип свойства в отладке , как на следующей картинке показано ниже:

введите описание изображения здесь

Так что ваше предложение, чтобы получить тип недвижимости?

1 ответы

25

Попробуйте кастинг 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;
    }
}