Сравните FxCop TypeNode с System.Type

У меня есть атрибут с именем SearchableAttribute, который помечает свойства классов. Однако только свойства типа string могут быть помечены с этим [Searchable] приписывать. Чтобы ограничить это, я пытаюсь написать правило CodeAnalysis, которое анализирует свойства моих классов, проверяет существование [Searchable] атрибут и создает Problem если тип свойства не string,

Это то, что у меня есть в классе Rule:

public override ProblemCollection Check(Member member) {
    PropertyNode property = member as PropertyNode;
    if (property == null) {
        return null;
    }

    if (property.Attributes.Any(a => a.Type.FullName.Equals((typeof(SearchableAttribute)).FullName)
            && !property.Type.FullName.Equals((typeof(string)).FullName)) {
        Resolution resolution = getResolution(property);
        Problem problem = new Problem(resolution);
        Problems.Add(problem);
    }

    return Problems;
}

Хотя это действительно работает, я не могу поверить... нет, я не хочу верить, что мне действительно нужно сравнивать полные имена типов. Я не могу понять, как правильно проверить наличие SearchableAttribute и сравните тип свойства со строкой. Нет ли чистого и элегантного решения?

1 ответ

Microsoft.FxCop.Sdk.FrameworkTypes.String должен сделать свое дело.

FWIW, нет реального моста между типами фреймворка и их FxCop TypeNodes. Все сопоставления должны быть созданы на основе имени, которое в идеале должно включать полное имя сборки. FrameworkTypes свойства в основном дают вам быстрый доступ к таким сопоставлениям, предварительно созданным для вас средой FxCop.

Другие вопросы по тегам