Проверить, является ли тип атрибутом? - PullRequest
1 голос
/ 07 февраля 2012

Я получил следующий код работ:

var library = Assembly.LoadFrom(libraryPath);

var namespaces = library.GetTypes().GroupBy(t => t.Namespace);
foreach (var typesInNamespace in namespaces)
{
    foreach (var type in typesInNamespace)
    {
        [...]
    }
}

Но когда я хочу проверить, является ли текущий тип атрибутом с этим кодом:

var attributes = typesInNamespace.Where(t => t is System.Attribute);

или

if (type is System.Attribute)

они оба терпят неудачу, и у меня есть следующее предупреждение:

The given expression is never of the provided ('System.Attribute') type

Классы определены следующим образом:

class ImportableModelAttribute : Attribute
{
}

class ImportableAttribute : Attribute
{
}

Если честно, я ожидал что-то вродеAPI для работы с атрибутами (что-то вроде if (type.IsAtteribute)), но я ничего не нашел, поэтому я пытаюсь сделать это таким образом!

1 Ответ

5 голосов
/ 07 февраля 2012

A Type само по себе никогда не является атрибутом (так же, как typeof(string) не является строкой), но я подозреваю, что вы хотите:

if (typeof(Attribute).IsAssignableFrom(type))

(Или, конечно, в лямбда-эксперименте.)

См. Документы для Type.IsAssignableFrom для получения дополнительной информации.

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