Le T t = new T();
générique ne fonctionnerait-il pas ?
On ne connaît pas toujours le Type d'un objet au moment de la compilation, mais on peut avoir besoin de créer une instance du Type. Comment obtenir une nouvelle instance d'objet à partir d'un Type ?
Le T t = new T();
générique ne fonctionnerait-il pas ?
ObjectType instance = (ObjectType)Activator.CreateInstance(objectType);
La classe Activator
a une variante générique qui rend cela un peu plus facile :
ObjectType instance = Activator.CreateInstance<ObjectType>();
Une implémentation de ce problème consiste à tenter d'appeler le constructeur sans paramètre du Type :
public static object GetNewObject(Type t)
{
try
{
return t.GetConstructor(new Type[] { }).Invoke(new object[] { });
}
catch
{
return null;
}
}
Voici la même approche, contenue dans une méthode générique :
public static T GetNewObject<T>()
{
try
{
return (T)typeof(T).GetConstructor(new Type[] { }).Invoke(new object[] { });
}
catch
{
return default(T);
}
}