【发布时间】:2015-06-25 16:50:04
【问题描述】:
我有一个带有 DisplayNameEx 属性的类,该属性派生自 DisplayNameAttibute:
public class Settings
{
[DisplayNameEx("User")]
public UserData User { get; set; }
}
public class DisplayNameExAttribute : DisplayNameAttribute
{
public DisplayNameExAttribute(string id)
{
}
}
我总是将我的属性的名称作为字符串 id 传递,因此这样编写代码会更容易:
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)?
}
}
是否也可以获取类名?
【问题讨论】:
-
@JoeFarrell:谢谢你。我刚刚编辑了我的问题,还有 gettng 类名的解决方案吗?
-
虽然我不理解你的目标,但恕我直言,这有点设计味道。属性不应该知道它们被应用(构造)到哪些成员。您可能应该将此逻辑放在您使用自定义属性的地方,例如,如果属性中的字符串为空或为空,则回退到属性名称。
-
@ZoltánTamási:我需要这个来进行本地化。在本地化文件中,我将使用 resourceID 作为 className.propertyName。我只是想装饰我的属性只是 [DisplayNameEx] 属性,而不是 [DisplayNameEx("className.propertyName")]。