get all types in assembly with custom attribute

Aidan picture Aidan · Jan 31, 2011 · Viewed 13.6k times · Source

Is there an elegant way to get all the types in an assembly that have a custom attribute?

So if I have a class

[Findable]
public class MyFindableClass
{}

I would like to be able to find it in a collection of types returned by Assembly.GetTypes(...)

I can do it with a big vile hack, but I'm sure someone has a nicer way.

Answer

Ani picture Ani · Jan 31, 2011

I wouldn't think you can dodge enumerating every type in the assembly, checking for the attribute, but you could use LINQ to make the query easier to understand:

Assembly assembly = ...
var types = from type in assembly.GetTypes()
            where Attribute.IsDefined(type, typeof(FindableAttribute))
            select type;

EDIT: Moved from MemberInfo.GetCustomAttributes to Attribute.IsDefined based on Marc Gravell's suggestion.