Идентификация всех типов с некоторым атрибутом - PullRequest
0 голосов
/ 10 апреля 2010

У меня проблема с отражением .Net.Эта концепция довольно новая для меня, и я изучаю ее с помощью нескольких тестовых примеров, чтобы увидеть, что работает, а что нет.Я создаю пример, в котором я динамически заполняю набор меню, просматривая атрибуты моих типов.

По сути, я хочу найти каждый тип в своем основном пространстве имен, который объявляет SomeAttribute (не имеет значениячто это, у него нет членов в настоящее время).Я сделал следующее:

    For Each itemtype As Type In Reflection.Assembly.GetExecutingAssembly().GetTypes
        If itemtype.IsDefined(Type.GetType("SomeAttribute"), False) Then
            'do something with the type
        End If
    Next

Это приводит к сбою приложения при запуске - первый тип, который он идентифицирует, - это MyApplication, что, очевидно, не то, что я хочу.Есть ли правильный и правильный способ поиска всех «реальных» «разумных» типов - то есть классов, которые я определил - в текущей сборке?

Ответы [ 2 ]

1 голос
/ 10 апреля 2010

Скорее всего, IsDefined() завершится неудачей, поскольку Type.GetType("SomeAttribute") возвращает ноль. Попробуйте добавить пространство имен к имени атрибута:

Type.GetType("SomeNamespace.SomeAttribute")
1 голос
/ 10 апреля 2010

Как насчет маленького Линка

var list =  AppDomain.CurrentDomain.GetAssemblies().SelectMany(x => x.GetTypes()).
                        Where(x => x.GetCustomAttributes(typeof(MyAttribute), false).Length > 0);
...