有点,虽然它可能比它的价值更麻烦。
ASP.Net MVC 经常使用表达式以强类型的方式获取属性信息。表达式不一定会被评估;相反,它被解析为它的元数据。
这不是 MVC 特有的。我提到它是为了引用 Microsoft 框架中的既定模式。
这是一个从表达式中获取属性名称和值的示例:
// the type being evaluated
public class Foo
{
public string Bar {
get;
set;
}
}
// method in an evaluator class
public TProperty EvaluateProperty<TProperty>( Expression<Func<Foo, TProperty>> expression ) {
string propertyToGetName = ( (MemberExpression)expression.Body ).Member.Name;
// do something with the property name
// and/or evaluate the expression and get the value of the property
return expression.Compile()( null );
}
你这样称呼它(注意被传递的表达式):
var foo = new Foo { Bar = "baz" };
string val = EvaluateProperty( o => foo.Bar );
foo = new Foo { Bar = "123456" };
val = EvaluateProperty( o => foo.Bar );