我有一个传递给函数的表达式,看起来像这样:
x=>x.SomeField
我想以某种方式获得这个字段的名称,“SomeField”,可以作为字符串访问我。 我意识到可以调用myExpression.ToString(),然后解析字符串,但我想要一个更稳固,更快速的方法。
答案 0 :(得分:6)
public string GetMemberName<T>(Expression<Func<T>> expr)
{
var memberExpr = expr.Body as MemberExpression;
if (memberExpr == null)
throw new ArgumentException("Expression body must be a MemberExpression");
return memberExpr.Member.Name;
}
...
MyClass x = /* whatever */;
string name = GetMemberName(() => x.Something); // returns "Something"
答案 1 :(得分:1)
您必须实现表达式树访问者
http://msdn.microsoft.com/en-us/library/bb882521(VS.90).aspx
您将您的eval代码放入MemberAccessExpression访问
答案 2 :(得分:0)
我已经使用ncommon框架中提供的一些帮助程序来完成此任务。具体来说,您会对Expressions namespace
中的课程感兴趣