2010-01-16 5 views
75

Est-il possible d'obtenir le code suivant? Je sais que ça ne marche pas, mais je me demande s'il y a une solution de contournement?Création d'une instance de type <T> générique avec une variable contenant le type

Type k = typeof(double); 
List<k> lst = new List<k>(); 
+0

peu confus par votre commentaire "cela peut être accompli en C# 4.0." Cela ne peut pas, du moins pas de la façon dont vous le montrez. C# 4 nécessite toujours des paramètres de type générique à spécifier lors de la compilation; vous ne pouvez toujours pas transmettre une variable Type en tant que paramètre de type générique. – itowlson

+1

Veuillez formuler les choses comme une question lorsqu'il s'agit d'une question. Le code spécifié ne peut pas être accompli avec C# 4.0. –

+1

Question similaire: http://stackoverflow.com/questions/687363/how-do-i-create-a-generic-class-from-a-string-in-c –

Répondre

112

Oui, il y a:

var genericListType = typeof(List<>); 
var specificListType = genericListType.MakeGenericType(typeof(double)); 
var list = Activator.CreateInstance(specificListType); 
+0

Je pense que c'est ce que je veux. Laissez-moi vérifier et je marquerai le vôtre comme la réponse momentanément. – Chris

+3

Je pense que le problème principal ici est que vous ne décrivez pas ce que vous voulez * nous *. Vous nous montrez une tentative ratée de * quelque chose * et vous demandez ensuite comment accomplir ce que vous voulez *. Si vous voulez des réponses, et non des suppositions, vous devez décrire ce que vous devez faire, plutôt que la façon dont vous avez essayé de le faire. –

+0

Cela devrait fonctionner, merci. – Chris

3

Une façon plus propre pourrait être d'utiliser une méthode générique. Faire quelque chose comme ceci:

static void AddType<T>() 
    where T : DataObject 
{ 
    Indexes.Add(typeof(T), new Dictionary<int, T>()); 
} 
0

Essayez ceci:

var genericListType = typeof(List<>); 
var specificListType = genericListType.MakeGenericType(typeof(double)); 
var list = Activator.CreateInstance(specificListType); 
+1

Merci d'avoir pris le temps de contribuer une réponse. C'est grâce à des pairs utiles comme vous que nous pouvons apprendre ensemble en tant que communauté. Voici quelques conseils pour améliorer votre réponse: [Comment écrire une bonne réponse] (https://stackoverflow.com/help/how-to-answer) – Brien

Questions connexes