0

現在、ジェネリック型パラメーターに基づいてオブジェクトのインスタンス化を行っている linq クエリがあります。実際には、ジェネリック パラメーターのより具体的なサブクラスをインスタンス化する必要があります。派生型でインスタンス化を行う方法はありますか? 可能であれば、基本クラスのプロパティの型チェックを続けたいと思っていますが、必要に応じてリフレクションや直接 IL 発行を使用することもできます。

だから私が持っているコードは次のようなものです:

IQueryable<TType> myObjects = from blah in blahblah
                              select new TType
                              {
                                   PropertyA = someValue;
                                   PropertyB = someOtherValue;
                              }

しかし、実際には IQueryable 内のオブジェクトが TType からの派生クラスである必要があります。それらがどの派生クラスになるかは事前にわかりませんが、他のロジックに基づいてすべて同じ派生型になるだけです。

4

1 に答える 1

1

Factory パターンが必要なようです。

from blah in blahblah
select BaseTypeFactory.Create(/* parameters/objects necessary to create the BaseType*/)

次に、正しい派生インスタンスBaseTypeFactoryを吐き出すために必要なことは何でもします。BaseType

(あなたのコメントが言うように)TType特定の基本型に制約されている場合、Factory は次のようになります。

TType(によって制約されると仮定where TType : BaseType)

public void BaseType TTypeFactory.Create(/* parameters/objects needed to create Base Types*/)
{
    // full of assumptions, modify to fit your needs:
    switch( typeID /*or some othervariable designating type to create*/)
    case 1: // DerivedType 1
        return new DerivedType1 { /* initialization parameters */ };
        break;
    case 2:
        return new DerivedType2 { /* initialization parameters */ };
        break;
    // etc.

}
于 2012-12-06T15:41:56.743 に答える