代码之家  ›  专栏  ›  技术社区  ›  Alex

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

c#
  •  1
  • Alex  · 技术社区  · 14 年前

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

    x=>x.SomeField
    

    我想以某种方式得到这个字段的名称,即“somefield”,以便作为字符串供我访问。 我认识到可以调用myexpression.toString(),然后解析字符串,但我希望使用更可靠、更快的方法。

    3 回复  |  直到 14 年前
        1
  •  6
  •   Thomas Levesque    14 年前
    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"
    
        2
  •  1
  •   Arthur    14 年前

    必须实现表达式树访问者

    http://msdn.microsoft.com/en-us/library/bb882521(VS.90).aspx

    在memberaccessexpression访问中输入eval代码

        3
  •  0
  •   DanP    14 年前

    我已经使用了 ncommon 实现这一目标的框架。具体来说,你会对 Expressions namespace