.net 获取简单表达式的名称

有一个类

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

  

现在我想通过如下设置使用Expression表达式

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

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

  

然后我想得到这个expression的名称Id。 

 

实现方法如下

 

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());
    }
}

  

使用方式

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

  

posted @ 2019-08-15 14:23  狂乱贵公子  阅读(194)  评论(0编辑  收藏  举报