Bonjour à tous !
En connaissant le nom d'un type simple il est très simple d'en faire une instance :
Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 private static object CreateInstance(string typeName) { foreach (Assembly assembly in AppDomain.CurrentDomain.GetAssemblies()) foreach (Type type in assembly.GetTypes()) if ((typeName == type.Name) || (typeName == type.FullName)) return Activator.CreateInstance(type); return null; }
Mais admettons que typeName désigne une classe générique...
Par exemple :
Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 string typeName = "System.Collections.Generic.List<System.String>";
Comment peut-on l'instancier ?
Il faut savoir que pour en déterminé l'assembly (afin d'en détermine le Type), il faudra transformer la valeur en System.Collections.Generic.List`1.
Ok, jusque là tout va bien : de la simple chaîne de caractères on vient d'en déduire le type. Mais évidement, dans l'état actuel, Activator.CreateInstance ne peut absolument rien faire : nous n'avons pas définit qu'il s'agissait d'une liste de System.String.
Savez-vous (planter des choux... euh non; désolé) comment définir la liste des "Arguments génériques", afin de procéder à l'instanciation ?
@++
NeoMan
PS : pour info, si vous désirez connaître les arguments génériques d'une instance déjà existante il suffit de faire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Type[] argsGenerics = monInstance.GetType().GetGenericArguments();
Partager