Как сравнить Microsoft.CodeAnalysis.ITypeSymbol с System.Type
Я успешно получил ITypeSymbol от SyntaxNode, используя:
SemanticModel.GetTypeInfo(sytaxNode).ConvertedType
Теперь я хотел бы знать, если этоITypeSymbol
соответствуетSystem.Type
экземпляр, который присутствует в моем исполняемом коде, какtypeof(IEnumerable<int>)
или жеsomeObject.GetType()
.
Я старался
typeInfo.ConvertedType.ToString() == type.ToString()
Но они не используют одни и те же правила форматирования, например, для дженериков, таких какIEnumerable<int>
TypeInfo.ToString() == "System.Collections.Generic.IEnumerable<int>"
в то время как
typeof(IEnumerable<int>).ToString() == "System.Collections.Generic.IEnumerable`1[System.Int32]"
Более того, я думаю, что было бы лучше сравнивать AssemblyQualifiedNames вместо только Пространства имен и имени типа, чтобы избежать возможных конфликтов имен.
В идеале я хотел бы иметь возможность получить фактический экземпляр System.Type в моем исполняемом коде, который соответствует ITypeInfo, полученному из семантической модели (при условии, что требуемая сборка загружена и / или доступна). Это позволило бы проверить, присваивается ли тип другому типу и т. Д.