Je vous vois déjà accepté une réponse, mais honnêtement, la réponse ne va pas être assez pour le faire de manière fiable si vous combinez ce qui est là avec ce que vous avez déjà écrit. Il est sur la bonne voie, mais ton code ne fonctionne que pour les types génériques avec exactement un paramètre générique, et il ne fonctionne que lorsque le paramètre de type générique lui-même n'est pas générique!
C'est une fonction (écrit comme une extension de la méthode) qui doit fonctionner dans tous les cas:
public static class TypeExtensions
{
public static string ToGenericTypeString(this Type t)
{
if (!t.IsGenericType)
return t.Name;
string genericTypeName = t.GetGenericTypeDefinition().Name;
genericTypeName = genericTypeName.Substring(0,
genericTypeName.IndexOf('`'));
string genericArgs = string.Join(",",
t.GetGenericArguments()
.Select(ta => ToGenericTypeString(ta)).ToArray());
return genericTypeName + "<" + genericArgs + ">";
}
}
Cette fonction est récursive et coffre-fort. Si vous l'exécutez sur cette entrée:
Console.WriteLine(
typeof(Dictionary<string, List<Func<string, bool>>>)
.ToGenericTypeString());
Vous obtenez ceci (correcte) de sortie:
Dictionary<String,List<Func<String,Boolean>>>