Como comparar um Microsoft.CodeAnalysis.ITypeSymbol com um System.Type
Recebi com sucesso um ITypeSymbol de um SyntaxNode usando:
SemanticModel.GetTypeInfo(sytaxNode).ConvertedType
Agora eu gostaria de saber se issoITypeSymbol
corresponde a umSystem.Type
instância que está presente no meu código de execução, comotypeof(IEnumerable<int>)
ousomeObject.GetType()
.
eu tentei
typeInfo.ConvertedType.ToString() == type.ToString()
Mas eles não usam as mesmas regras de formatação, por exemplo, para genéricos comoIEnumerable<int>
TypeInfo.ToString() == "System.Collections.Generic.IEnumerable<int>"
enquanto
typeof(IEnumerable<int>).ToString() == "System.Collections.Generic.IEnumerable`1[System.Int32]"
Além disso, acho que seria melhor comparar AssemblyQualifiedNames em vez de apenas o Namespace e digite o nome para evitar possíveis conflitos de nome.
Idealmente, eu gostaria de obter a instância System.Type real no meu código de execução que corresponde ao ITypeInfo que obtive do modelo semântico (desde que o assembly necessário esteja carregado e / ou disponível). Isso permitiria verificar se o tipo é atribuível a partir de outro tipo, etc.