Вот обходной путь для этого, который я лично считаю довольно эффективным. Если вы подумаете о том, что такое общее ограничение параметризованного конструктора, это действительно отображение между типами и конструкторами с определенной сигнатурой. Вы можете создать свое собственное такое отображение, используя словарь. Поместите их в статический «фабричный» класс, и вы сможете создавать объекты различного типа, не беспокоясь о построении лямбда-конструктора каждый раз:
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) }
};
тогда в вашем родовом методе, например:
public static T BuildBaseType<T>(...)
where T : BaseType
{
...
T myObject = (T)mTypeConstructors[typeof(T)](value1, value2);
...
return myObject;
}