я успешно получил в ITypeSymbol из SyntaxNode с помощью:Как сравнить Microsoft.CodeAnalysis.ITypeSymbol к System.Type
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]"
Кроме того, я думаю, что это было бы лучше сравнить AssemblyQuali fiedNames вместо простого пространства имен и имени типа, чтобы избежать возможных конфликтов имен.
В идеале, я хотел бы иметь возможность получить фактический экземпляр System.Type в моем исполняемом коде, который соответствует ITypeInfo, полученному из семантической модели (при условии, что необходимая сборка загружена и/или доступна). Это позволит проверить, является ли тип назначаемым из какого-либо другого типа и т. Д.
Возможный дубликат [SemanticModel.GetTypeInfo() для ObjectCreationExpressionSyntax.Type возвращает нуль] (http://stackoverflow.com/questions/27535382/semanticmodel-gettypeinfo-for-objectcreationexpressionsyntax-type-returns-null) – MethodMan
Не дубликат, этот вопрос касается того, как получить TypeInfo, этот вопрос касается того, как сравнить TypeInfo с типом –
. Если вы можете получить TypeInfo, я подумал, что вы можете сравнить, но, возможно, я ошибаюсь, может быть, мое понимание относится к этой ссылке в отношении вашего последнего комментария http://stackoverflow.com/questions/28240167/correct-way-to-check-the-type-of-an-expression-in-roslyn-analyzer – MethodMan