2017-09-20 5 views
0

J'ai un Type dynamique généré lors de l'exécution, par exemple myGeneratedType. J'essaye de créer une instance de la classe suivante, où T devrait être myGeneratedType. Je suis venu dans plusieurs réponses où un type dynamique a dû être mis à une propriété d'une classe, mais ne peut pas sembler le faire fonctionner sur un List<T>:Paramètre de type générique pour définir une liste de types dynamiques à l'exécution

Type myGeneratedType; 

private class Container<T> 
{ 
    public string a { get; set; } 
    public string b { get; set; } 
    public List<T> c { get; set; } 
} 

void Main() 
{ 
    Container<myGeneratedType> c = new Container<myGeneratedType>(); 
} 

De toute évidence, la ligne de code dans ma méthode Main() ne marche pas. Que dois-je faire pour créer une classe de Container avec mon type dynamique en tant que paramètre de type générique?

+0

Quelles autres réponses avez-vous rencontré et pourquoi ne travaillent-ils pas? – DavidG

+0

Utilisez MakeGenericType: https://msdn.microsoft.com/fr-fr/library/system.type.makegenerictype(v=vs.110).aspx –

+0

Pouvez-vous ajouter un contexte comme ce que vous allez faire avec 'c '? Si vous ne connaissez pas ce type au moment de la compilation, vous pouvez construire le 'Type' comme @YairHalberstadt suggère, mais cela n'aidera pas à déclarer' c' et à l'utiliser. Qu'essayez-vous exactement d'accomplir? –

Répondre

2

Utilisation MakeGenericType:

 var type = typeof(Container<>); 
     var MyGenericType = type.MakeGenericType(myGeneratedType)); 

myGeneratedType est un Type

+0

' typeof (Container <>) 'aboutit à' null' pour moi. Est-ce que je fais quelque chose de mal? – Aquillo

+2

@Aquillo vous faites sûrement quelque chose de mal, 'typeof (Container <>)' ne peut pas retourner 'null'. –

+0

Fonctionne bien pour moi. –