web-dev-qa-db-fra.com

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

J'ai une classe générique, 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': ne peut pas fournir d'arguments lors de la création d'une instance d'un type de variable

Des idées comment puis-je faire cela?

74
Roman

Jeter un coup d'œil à Activator.CreateInstance . Par exemple:

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

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

Si vous recevez une erreur de compilation sur cannot convert object to type T, puis incluez as T:

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