简体   繁体   English

如何从表达式中获取属性名称

[英]How to get property name from expression

I have class Test:我有类测试:

class Test
{
    public int Id {get;set;}
    public string Name {get;set;}
}

And function Exec which accepts expression:和接受表达式的函数 Exec :

void Exec<T>(Expression<Func<T, object>> expression)
{
}

...
Exec<Test>(t => t.Id);

How can I get the property name used in expression?如何获取表达式中使用的属性名称? In the code above this should be Id.在上面的代码中,这应该是Id。

Something like:就像是:

private static string GetMemberName(Expression expression)
{
    switch(expression.NodeType)
    {
        case ExpressionType.MemberAccess:
            return ((MemberExpression)expression).Member.Name;
        case ExpressionType.Convert:
            return GetMemberName(((UnaryExpression)expression).Operand);
        default:
            throw new NotSupportedException(expression.NodeType.ToString());
    }
}

with:和:

public void Exec<T>(Expression<Func<T, object>> expression)
{
    string name = GetMemberName(expression.Body);
    // ...
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM