1

I'm trying to figure out there proper way to compare attribute data in Roslyn.

static bool ResolveAttributes(IMethodSymbol methodSymbol)
{
    var attributes = methodSymbol.GetAttributes();

    return null == attributes.FirstOrDefault(attr => isIDEMessageAttribute(attr, typeof(MyAttributeType)));
}

static bool IsIDEMessageAttribute(AttributeData attribute, Type desiredAttributeType)
{
    //How can I check if the attribute is the type of desired?
}

How can I check if the attribute is the type of desired?

johnny 5
  • 19,893
  • 50
  • 121
  • 195

1 Answers1

7

AttributeData.AttributeClass gives you the Roslyn symbol for the attribute. But you've got a CLR runtime Type you are trying to compare against. You can either just compare the type names, etc, to see if they are the probably the same type, or get a Roslyn type symbol for MyAttributeType, which is more correct. This is typically done via

var desiredSymbol = sematicModel.Compilation.GetTypeByMetadataName(typeof(MyAttributeType).FullName)
johnny 5
  • 19,893
  • 50
  • 121
  • 195
Matt Warren
  • 1,956
  • 14
  • 15