我有一个带有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)?
}
}
是否也可以获得课程名称?
答案 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
,因为它支持本地化,而且功能更强大。
我个人不会推荐你的想法,主要有两个原因。
潜在的重构问题。如果重命名您的属性,他不知道他还应该使用相同的名称重命名该资源。同名代表类名。几个月后,即使你可以不时忘记它。
代码不简单。其他开发人员无法轻易了解您的属性正在做什么,甚至很难看出它与本地化有关。
我认为最好只是把那些字符串放在那里。