Поскольку есть (на данный момент) два атрибута, которые необходимо указать. для анализа я создал вспомогательный метод, который определяет, существует ли атрибут в свойстве:
Код: Выделить всё
private static bool HasAttribute(SyntaxNodeAnalysisContext context, string attributeName, out PropertyAttributeData data)
{
var propertyDeclarationSyntax = (PropertyDeclarationSyntax)context.Node;
data = new PropertyAttributeData
{
Type = propertyDeclarationSyntax.Type
};
var propertyAttribute = propertyDeclarationSyntax.AttributeLists.FirstOrDefault()
?.GetAttributes(context.Compilation)
?.FirstOrDefault(attr => attr.AttributeClass?.Name == attributeName);
if (propertyAttribute == null)
{
return false;
}
data.AttributeData = propertyAttribute;
data.ConstructorArg1 = propertyAttribute.ConstructorArguments.FirstOrDefault();
if (propertyAttribute.ConstructorArguments.Length > 1)
{
data.ConstructorArg2 = propertyAttribute.ConstructorArguments.Skip(1).FirstOrDefault();
}
return true;
}
Как я бы пошел на получение местоположения только атрибута или первого/второго аргумента it? Любые рекомендации будут оценены по достоинству. ТИА.
Подробнее здесь: https://stackoverflow.com/questions/793 ... -parameter