78 votes

Génériques en C # - comment créer une instance de type variable avec un argument?

J'ai une classe de génériques, où je veux instancier un objet avec le type générique. Je veux utiliser un argument pour le constructeur du type.

Mon code:

 public class GenericClass<T> where T : Some_Base_Class, new()
{
    public static T SomeFunction(string s)
    {
        if (String.IsNullOrEmpty(s))
            return new T(some_param);
    }
}
 

Je reçois une erreur sur le

 new T(some_param)
 

'T': impossible de fournir des arguments lors de la création d'une instance d'un type de variable

Des idées comment puis-je faire cela?

119voto

Grant Thomas Points 28280

Regardez Activator.CreateInstance . Par exemple:

 var instance = Activator.CreateInstance(typeof(T), new object[] { null, null });
 

Évidemment, remplacer les null s par les valeurs appropriées attendues par l'un des constructeurs du type.

Si vous recevez une erreur du compilateur à propos de cannot convert object to type T , incluez alors as T :

 var instance = Activator.CreateInstance(typeof(T), 
                  new object[] { null, null }) as T;
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X