これは、私が個人的に非常に効果的だと思う回避策です。一般的なパラメーター化されたコンストラクター制約とは何かを考えると、それは実際には、特定のシグニチャーを持つ型とコンストラクターの間のマッピングです。辞書を使用して、このような独自のマッピングを作成できます。これらを静的な「ファクトリ」クラスに入れると、毎回コンストラクタラムダを構築することを心配することなく、さまざまなタイプのオブジェクトを作成できます。
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;
}