Получить тип свойства по MemberExpression
Я задаю аналогичный вопрос здесь
, предположим, что этот тип:
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);
in HelperClass
Мне просто нужно имя свойства (в этом примере IsAllowed
) и тип свойства (в этом примере Boolean
). Поэтому я могу получить имя свойства, но я не могу получить тип свойства. Я вижу тип свойства в отладке, как показано ниже:
![enter image description here]()
Итак, каково ваше предложение получить тип свойства?
Ответы
Ответ 1
Попробуйте отличить 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;
}
}