получить все типы в сборке с пользовательским атрибутом - PullRequest
26 голосов
/ 31 января 2011

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

Так что, если у меня есть класс

[Findable]
public class MyFindableClass
{}

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

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

1 Ответ

45 голосов
/ 31 января 2011

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

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

РЕДАКТИРОВАТЬ: перенесено из MemberInfo.GetCustomAttributes до Attribute.IsDefined по предложению Марка Гравелла.

...