【问题标题】:Get the attribute name/string of a class with attribute获取具有属性的类的属性名称/字符串
【发布时间】:2011-04-12 08:05:06
【问题描述】:

我有一个名为 BillingActivity、DevelopmentActivity、ResearchActivity 的类都实现了 IActivity。

在我的应用程序的某个地方,我枚举了一个包含所有类型的 dll。检查 typeof(IActivity).IsAssignable(type) 如果是这样我想得到字符串 typeDescription = type.Attribute.Value 或类似我想要的是将属性放在一个类或上述类上(取决于你提出什么建议或什么解决方案是可能的)比如

[ActivityType = "Billing"].
public class BillingActivity {}

我不想获取该类型的实例,我只想获取描述(属性的值)。

我该怎么做?有人可以将我推向正确的方向吗?

【问题讨论】:

    标签: c# .net attributes annotations


    【解决方案1】:

    创建一个带有单个字符串属性的自定义属性,用它标记你的类,然后 GetCustomAttributes 测试一个特定的类是否用该属性标记,如果是,你可以读取属性来提取你设置的名称。

    public class ActivityTypeAttribute : Attribute 
    {
     public Name { get; set; }
    }
    
    [ActivityType(Name="MyClass")]
    public class MyClass { }
    
    ...
    {
     ActivityTypeAttribute att = (ActivityTypeAttribute)Attribute.GetCustomAttribute(typeof(MyClass), typeof(ActivityTypeAttribute));
    
      Debug.Assert( att.Name == "MyClass" );
    }
    ...
    

    编辑 - 另外,请阅读此内容

    What's the simplest most elegant way to utilize a custom attribute

    【讨论】:

    • 当我在 MyClass 上写这个 [ActivityType(Name="MyClass")] 时无法解决? MyClass 不应该从 Attribute 继承吗?
    • 不,自定义属性类是唯一需要从Attribute继承的。你能发布一个你看到的例子吗?
    【解决方案2】:
    ActivityType result =
      (ActivityType)Attribute.GetCustomAttribute(this.GetType(), typeof(ActivityType));
    

    【讨论】:

      猜你喜欢
      • 2019-12-07
      • 1970-01-01
      • 2014-03-06
      • 2014-06-27
      • 2017-08-18
      • 1970-01-01
      • 2011-09-30
      • 1970-01-01
      相关资源
      最近更新 更多