2010-10-03 7 views
1

Je commence à C# et j'essaie de créer une méthode qui prend une chaîne, puis instancie un objet en utilisant la chaîne comme un type.littéral de chaîne converti en type ou espace de noms pour les génériques C#

public void CreateRepository(string name) { 
     var repository = new Repository<name>(); 
} 

par exemple.

Évidemment j'obtiens une erreur de compilateur mais comment convertir ma chaîne en espace de noms?

+2

Pourquoi voulez-vous le faire de cette façon? Pourquoi avez-vous besoin de créer le type à partir de la chaîne et que voulez-vous faire avec le résultat plus tard? – svick

Répondre

4

Vous pouvez le faire de cette façon:

public void CreateRepository(string name) 
{ 
    var type = Type.GetType(name); 
    var genericRepositoryType = typeof(Repository<>).MakeGenericType(type); 
    var repositoryObj = Activator.CreateInstance(genericRepositoryType); 
    // N.B. repositoryObj variable is System.Object 
    //  but is also an istance of Repository<name> 
} 
Questions connexes