2010-05-14 3 views
17

Je dois créer un type générique, mais je ne connais pas le type lors de la compilation. Je voudrais faire ceci:Initialiser un objet générique à partir d'un System.Type

Type t = typeof(whatever); 
var list = new List<t> 

cela ne compilera pas, parce que t n'est pas un type valide. Mais il sait tout sur un type valide. Est-il possible de créer dynamiquement la liste générique à partir d'un System.Type comme ça? J'ai peut-être besoin de réflexion, et c'est bon, je suis juste un peu perdu ici.

Répondre

24

Comme ceci:

Type t; 
Type genericListType = typeof(List<>).MakeGenericType(t); 
object list = Activator.CreateInstance(genericListType); 

Notez que vous ne pouvez l'assigner à une variable de type object. (Bien que vous puissiez convertir vers l'interface non générique IList)

Pour utiliser la variable list, vous aurez probablement besoin de réflexion.

+1

+1 Ne savait pas 'List <>' était légal du tout. plutôt cool. –

+1

@Igot: Seulement dans 'typeof'. – SLaks

+0

Cela fonctionne très bien, sauf que c'est une douleur à utiliser par la suite. Obtient le travail cependant. – captncraig

Questions connexes