简体   繁体   中英

Get the attribute name/string of a class with attribute

I have a classes called BillingActivity, DevelopmentActivity, ResearchActivity all implementing IActivity.

Somewhere in my app I enumerate a dll containing all types. Check wether typeof(IActivity).IsAssignable(type) if so I want to get string typeDescription = type.Attribute.Value or similar what I want is to put a attribute on a class OR on the above classes (depends what suggestions you make or what solutions are possible) like

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

I do not want to get a instance of that type I just want to get the description(attribute `s value).

How can I do that? Can someone push me in the right direction please?

Create a custom attribute with a single string property, tag your classes with it, then GetCustomAttributes to test a particular class is tagged with the attribute, and if it is you can read the property to pull the name you set.

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" );
}
...

Edit - Also, please read this

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

ActivityType result =
  (ActivityType)Attribute.GetCustomAttribute(this.GetType(), typeof(ActivityType));

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM