【发布时间】:2015-12-16 05:44:11
【问题描述】:
我正在尝试编写一个通用函数,它接受一个成员表达式和一个对象,并返回成员表达式中定义的属性的值。
这是获取属性名称的代码示例。
public static TProperty GetPropertyName<TModel, TProperty>(Expression<Func<TModel, TProperty>> expression, TModel model)
{
if (expression.Body is MemberExpression)
{
return ((MemberExpression)expression.Body).Member.Name;
}
else
{
var op = ((UnaryExpression)expression.Body).Operand;
return ((MemberExpression)op).Member.Name;
}
}
但我想从模型中检索属性的值:
public static string GetPropertyValue<TModel, TProperty>(Expression<Func<TModel, TProperty>> expression, TModel model)
{
if (expression.Body is MemberExpression)
{
// how do I apply the expression.Body to get the value of the property from model??
}
else
{
var op = ((UnaryExpression)expression.Body).Operand;
return ((MemberExpression)op).Member.Name;
}
}
我调用这个函数的方式是:
GetPropertyValue<ObjectModel,bool>(m => m.somebool, m);
【问题讨论】: