Voici une solution de contournement pour ce que je trouve personnellement assez efficace. Si vous pensez à ce que un générique constructeur paramétré contrainte, c'est vraiment une correspondance entre les types et les constructeurs avec une signature. Vous pouvez créer votre propre cette cartographie à l'aide d'un dictionnaire. Mettez-les dans un statique de la "fabrique" de la classe et vous pouvez créer des objets de type variable sans avoir à se préoccuper de la construction d'un constructeur lambda à chaque fois:
public static class BaseTypeFactory
{
private delegate BaseType BaseTypeConstructor(int pParam1, int pParam2);
private static readonly Dictionary<Type, BaseTypeConstructor>
mTypeConstructors = new Dictionary<Type, BaseTypeConstructor>
{
{ typeof(Object1), (pParam1, pParam2) => new Object1(pParam1, pParam2) },
{ typeof(Object2), (pParam1, pParam2) => new Object2(pParam1, pParam2) },
{ typeof(Object3), (pParam1, pParam2) => new Object3(pParam1, pParam2) }
};
puis dans votre méthode générique, par exemple:
public static T BuildBaseType<T>(...)
where T : BaseType
{
...
T myObject = (T)mTypeConstructors[typeof(T)](value1, value2);
...
return myObject;
}