Jak analizować nazwy typów ogólnych C #?

W jaki sposób mogę parsować nazwy typu ogólnego typu C # w formacieList<int> lubDictionary<string,int> lub nawet bardziej skomplikowaneDictionary<string,Dictionary<System.String,int[]>>. Załóżmy, że te nazwy są ciągami znaków i mogą w rzeczywistości nie reprezentować istniejących typów. Powinno równie dobrze być w stanie analizowaćBogusClass<A,B,Vector<C>>. Żeby było jasne, NIE jestem zainteresowany analizowaniem nazw wewnętrznych typów .NET formatuList`1[[System.Int32]], ale rzeczywiste nazwy typu C #, które pojawiałyby się w kodzie źródłowym, z lub bez kwalifikatorów przestrzeni nazw, używając notacji kropkowej.

Wyrażenia regularne są wyłączone, ponieważ są to struktury zagnieżdżone. Pomyślałem, że być może konstruktor System.CodeDom.CodeTypeReference przeanalizuje go dla mnie, ponieważ mastring BaseType iCodeTypeReferenceCollection TypeArguments członków, ale najwyraźniej trzeba je ustawić ręcznie.

CodeTypeReference to rodzaj struktury, której potrzebuję:

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

Czy istnieją jakieś istniejące klasy w ramach, aby osiągnąć ten rodzaj parsowania nazw typów? Jeśli nie, to jak bym to przeanalizował?

questionAnswers(2)

yourAnswerToTheQuestion