¿Cómo analizar los nombres genéricos de C #?

¿Cómo puedo analizar los nombres de tipos genéricos de estilo C # del formato?List<int> oDictionary<string,int> o incluso más complejoDictionary<string,Dictionary<System.String,int[]>>. Suponga que estos nombres son cadenas y pueden no representar realmente los tipos existentes. Debe ser fácilmente capaz de analizarBogusClass<A,B,Vector<C>>. Para ser claros, NO estoy interesado en analizar los nombres de tipo interno de .NET del formatoList`1[[System.Int32]], pero los nombres reales de tipo C # tal como aparecerían en el código fuente, con o sin calificadores de espacio de nombres usando notación de puntos.

Las expresiones regulares están fuera porque son estructuras anidadas. Pensé que tal vez el constructor System.CodeDom.CodeTypeReference lo analizaría para mí ya que tienestring BaseType yCodeTypeReferenceCollection TypeArguments miembros, pero los que aparentemente necesitan ser configurados manualmente.

CodeTypeReference es el tipo de estructura que necesito:

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
    }
}

¿Hay alguna clase existente en el marco para lograr este tipo de análisis de nombre de tipo? Si no, ¿cómo voy a analizar esto?

Respuestas a la pregunta(2)

Su respuesta a la pregunta