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?