Como analisar nomes de tipo genérico do C #?

Como posso analisar nomes de tipo genérico no estilo C # do formatoList<int> ouDictionary<string,int> ou ainda mais complexoDictionary<string,Dictionary<System.String,int[]>>. Suponha que esses nomes sejam strings e talvez não representem realmente os tipos existentes. Deveria ser tão facilmente capaz de analisarBogusClass<A,B,Vector<C>>. Para ser claro, não estou interessado em analisar nomes de tipos internos do .NET do formatoList`1[[System.Int32]], mas nomes de tipo C # reais como eles apareceriam no código-fonte, com ou sem qualificadores de namespace usando a notação de ponto.

Expressões regulares estão fora porque estas são estruturas aninhadas. Eu pensei que talvez o construtor System.CodeDom.CodeTypeReference iria analisá-lo para mim, uma vez que temstring BaseType eCodeTypeReferenceCollection TypeArguments membros, mas aparentemente eles precisam ser definidos manualmente.

CodeTypeReference é o tipo de estrutura que eu preciso:

class TypeNameStructure
{
    public string Name;
    public TypeNameStructure[] GenericTypeArguments;
    public bool IsGenericType{get;}
    public bool IsArray{get;} //would be nice to detect this as well

    public TypeNameStructure( string friendlyCSharpName )
    {
       //Parse friendlyCSharpName into name and generic type arguments recursively
    }
}

Existem classes existentes na estrutura para obter esse tipo de análise de nomes de tipos? Se não, como eu iria analisar isso?

questionAnswers(2)

yourAnswerToTheQuestion