当前位置:  开发笔记 > 编程语言 > 正文

通过将属性的名称传递给方法来获取属性的名称

如何解决《通过将属性的名称传递给方法来获取属性的名称》经验,为你挑选了2个好方法。

StackOverflow用户jolson有一段很好的代码,它举例说明了如何在不使用字符串的情况下注册menthods,而是在这里表达树.

是否可以为属性而不是方法提供类似的东西?传递属性(不是属性的名称)并在方法内部获取属性名称?

像这样的东西:

    RegisterMethod(p => p.Name)

    void RegisterMethod(Expression??? propertyExpression) where T : Property ???
    {
        string propName = propertyExpression.Name;
    }

谢谢.



1> Marc Gravell..:

我在这里发布了一个完整的例子(另见关于this它下面的帖子)

请注意它处理LambdaExpression等.作为已发布的代码的更新,您可以添加更多,以便在某些情况下更容易使用:

static class MemberUtil
{
    public static string MemberName(Expression> member)
    {
        return MemberUtil.MemberName(member);
    }
}

然后,您可以使用泛型类型推断作为返回值:

string test1 = MemberUtil.MemberName(x => x.Bar); 
string test2 = MemberUtil.MemberName(x => x.Bloop()); 



2> Jb Evain..:

你可以写这个:

static void RegisterMethod (Expression> expression)
{
    var member_expression = expression.Body as MemberExpression;
    if (member_expression == null)
        return;

    var member = member_expression.Member;
    if (member.MemberType != MemberTypes.Property)
        return;

    var property = member as PropertyInfo;
    var name = property.Name;

    // ...
}

推荐阅读
mobiledu2402851323
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有