在DisplayNameAttribute派生类中获取属性和类名

时间:2015-04-18 21:06:42

标签: c# .net .net-4.5

我有一个带有DisplayNameEx属性的类的类,它来自DisplayNameAttibute:

public class Settings
{
    [DisplayNameEx("User")]
    public UserData User { get; set; }
}

public class DisplayNameExAttribute : DisplayNameAttribute
{
    public DisplayNameExAttribute(string id)
    {

    }
}

我传递了我的属性的字符串ID ALLWAYS名称,因此以这种方式编写代码会更容易:

public class Settings
{
    [DisplayNameEx()]
    public UserData User { get; set; }
}

属性名称我可以使用CallerMemberName属性:

public class DisplayNameExAttribute : DisplayNameAttribute
{
    public DisplayNameExAttribute([CallerMemberName] string propertyName = null)
    {
        //propertyName I get, what about class name (Settings in my case)?
    }
}

是否也可以获得课程名称?

2 个答案:

答案 0 :(得分:0)

这是不可能的。在您的情况下,最好的方法是在属性的构造函数中使用类名称的参数:

public class DisplayNameExAttribute : DisplayNameAttribute
{
    public DisplayNameExAttribute(string className = null)
    {

    }
}

然后像这样使用它:

public class Settings
{
    [DisplayNameEx("Settings")]
    public UserData User { get; set; }
}

答案 1 :(得分:0)

我在.NET 4的可本地化DisplayAttribute之前使用了类似的技术。从.NET 4开始,我使用DisplayAttribute,因为它支持本地化,而且功能更强大。

我个人不会推荐你的想法,主要有两个原因。

  1. 潜在的重构问题。如果重命名您的属性,他不知道他还应该使用相同的名称重命名该资源。同名代表类名。几个月后,即使你可以不时忘记它。

  2. 代码不简单。其他开发人员无法轻易了解您的属性正在做什么,甚至很难看出它与本地化有关。

  3. 我认为最好只是把那些字符串放在那里。