如何从表达式中获取字段的名称?

时间:2010-07-14 13:22:22

标签: c#

我有一个传递给函数的表达式,看起来像这样:

x=>x.SomeField

我想以某种方式获得这个字段的名称,“SomeField”,可以作为字符串访问我。 我意识到可以调用myExpression.ToString(),然后解析字符串,但我想要一个更稳固,更快速的方法。

3 个答案:

答案 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

中的课程感兴趣