如何从自定义属性中确定附加类型?

时间:2008-11-09 11:57:26

标签: c# .net reflection custom-attributes

我有一个自定义属性,可以将其分配给类[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)
  }
}

4 个答案:

答案 0 :(得分:5)

首先,您可以考虑使用现有的[DisplayName]来保留友好名称。正如已经涵盖的那样,您根本无法在属性中获取此信息。您可以从Bar中查找属性,但一般来说,从属性中执行此操作的唯一方法是将类型传递给属性 - 即。

[Foo("Some name", typeof(Bar)]

你想要做什么?可能还有其他选择......

注意,对于i18n,resx等;您可以通过覆盖DisplayNameAttribute getter来子类化DisplayName并通过键提供查找。

答案 1 :(得分:3)

详细说明。内置或自定义的属性只是类或类成员的元数据,而属性本身并不表示它与某些内容相关联。

  • 该类型知道它自己的元数据
  • 元数据(在这种情况下,属性)不知道它属于谁

答案 2 :(得分:1)

从你的句子“我只是想用反射设置友好名称”我想你想在运行时将“MyFriendlyNameForThisClass”名称设置为属性。如果是这样,我认为这是不可能的。请参阅this thread

答案 3 :(得分:1)

这很笨拙但你可以迭代程序集中的所有类,测试每个类的“是”这个实例的自定义属性。