Getting the fully qualified name of a type from a TypeInfo object

c#, roslyn

Solution

The `ToDisplayString` method lets you pass in a "format" object which has a huge number of options for controlling how you want to format stuff:

var symbolDisplayFormat = new SymbolDisplayFormat(
    typeQualificationStyle: SymbolDisplayTypeQualificationStyle.NameAndContainingTypesAndNamespaces);

string fullyQualifiedName = typeSymbol.ToDisplayString(symbolDisplayFormat);

The reason your getting keywords like "int" is the default format is including the `SymbolDisplayMiscellaneousOptions.UseSpecialTypes` flag which specifies to use the language keywords for special types vs. the regular name.

Problem

Is it somehow possible to get the fully qualified name of the type contained in a `TypeInfo` object? In the debugger many of these values nicely show up as `System.Int32` but when it's printed out, not one of them contains this fully qualified name. I need this to provide as an argument to `Type.GetType()`. ``` var typeInfo = semanticModel.GetTypeInfo(argument); var w = typeInfo.ToString(); // Microsoft.CodeAnalysis.TypeInfo var y = typeInfo.Type.ToString(); // int var z = typeInfo.Type.ToDisplayString(); // int var a = typeInfo.Type.OriginalDefinition.ToDisplayString(); // int var b = typeInfo.Type.OriginalDefinition.ToString(); // int var c = typeInfo.Type.Name; // Int32 var d = typeInfo.Type.MetadataName; // Int32 var e = typeInfo.Type.ToDisplayParts(); // {int} var f = typeInfo.Type.ContainingNamespace; // System ``` Note that this should work for every type so I can't just concatenate the namespace with the name. Alternatively: is there another (more suited?) way to get the exact type? For context: I want to check if the type-parameters of a class contain a few specific methods. Therefore my approach was to get the parameters from the `TypeArgumentListSyntax` and get the `TypeInfo` from each `TypeSyntax` object.

Original source