Сравните 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 TypeNode
s. Все сопоставления должны быть созданы на основе имени, которое в идеале должно включать полное имя сборки. FrameworkTypes
свойства в основном дают вам быстрый доступ к таким сопоставлениям, предварительно созданным для вас средой FxCop.