Подтвердить что ты не робот

Получить все типы в сборке с пользовательским атрибутом

Есть ли элегантный способ получить все типы в сборке с пользовательским атрибутом?

Итак, если у меня есть класс

[Findable]
public class MyFindableClass
{}

Я хотел бы найти его в коллекции типов, возвращаемых Assembly.GetTypes(...)

Я могу сделать это с большим мерзким взломом, но я уверен, что у кого-то есть лучший способ.

4b9b3361

Ответ 1

Я бы не подумал, что вы можете уклониться от перечисления всех типов сборки, проверяя атрибут, но вы можете использовать LINQ, чтобы облегчить понимание запроса:

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

EDIT: перемещено от MemberInfo.GetCustomAttributes до Attribute.IsDefined на основе предложения Марка Гравелла.