我有一个自定义属性,可以将其分配给类[FooAttribute]
。我想在属性中做的是确定哪种类型实际使用了我。例如如果我有:
[FooAttribute]
public class Bar
{
}
在FooAttribute的代码中,我如何确定添加了我的Bar类?我不是专门寻找Bar类型,我只是想用反射设置一个友好的名字。 e.g。
[FooAttribute(Name="MyFriendlyNameForThisClass")]
public class Bar
{
}
public class FooAttribute()
{
public FooAttribute()
{
// How do I get the target types name? (as a default)
}
}
答案 0 :(得分:5)
首先,您可以考虑使用现有的[DisplayName]
来保留友好名称。正如已经涵盖的那样,您根本无法在属性中获取此信息。您可以从Bar中查找属性,但一般来说,从属性中执行此操作的唯一方法是将类型传递给属性 - 即。
[Foo("Some name", typeof(Bar)]
你想要做什么?可能还有其他选择......
注意,对于i18n,resx等;您可以通过覆盖DisplayNameAttribute
getter来子类化DisplayName
并通过键提供查找。
答案 1 :(得分:3)
详细说明。内置或自定义的属性只是类或类成员的元数据,而属性本身并不表示它与某些内容相关联。
答案 2 :(得分:1)
从你的句子“我只是想用反射设置友好名称”我想你想在运行时将“MyFriendlyNameForThisClass”名称设置为属性。如果是这样,我认为这是不可能的。请参阅this thread。
答案 3 :(得分:1)
这很笨拙但你可以迭代程序集中的所有类,测试每个类的“是”这个实例的自定义属性。