Найти все классы с атрибутом, содержащим определенное значение свойства - PullRequest
6 голосов
/ 26 августа 2010

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

В принципе, у меня есть классы, которые выглядят так -

[MyAttr("CODE")]
public class MyClass() {}

Оттуда я получаю все классы (типы) -

var c = Assembly.GetExecutingAssembly().GetTypes().Where
                        (
                            t => t.IsClass && 
                            t.Namespace == (typeof(AbstractParentClass)).Namespace &&
                            t.IsSubclassOf(typeof(AbstractParentClass))
                        );

Кажется, все это работает.c содержит все соответствующие классы.Теперь мне нужно получить класс из c, который имеет атрибут MyAttr и значение "CODE".Значение доступно через свойство в MyAttr, которое называется Id.

Это была моя попытка -

var message = from m in c
                  from a in m.GetCustomAttributes(typeof(MyAttr), false)
                  where ((MyAttr)a).Id == "CODE"
              select m;

Это не сработало.Итак, реальный вопрос заключается в том, возможно ли это вообще, и если да, то что нужно изменить, чтобы получить соответствующий класс (и создать его экземпляр).

1 Ответ

3 голосов
/ 27 августа 2010

Заменить Assembly.GetExecutingAssembly() на typeof(AbstractParentClass).Assembly.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...