2017-07-28 72 views
0

我想弄清楚有哪些方法來比較Roslyn中的屬性數據。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? 
} 

如何檢查屬性是否爲所需的類型?

回答

4

AttributeData.AttributeClass爲您提供該屬性的Roslyn符號。但是你有一個你試圖比較的CLR運行時類型。您可以只比較類型名稱等,看它們是否可能是相同的類型,或者獲得MyAttributeType的Roslyn類型符號,這是更正確的。這通常通過

var desiredSymbol = sematicModel.Compilation.GetTypeByMetadataName(typeof(MyAttributeType).FullName)