1

いつもとは逆の方向に進んでみます。

BがAから継承する2つのPOCOクラスAとBがあります

public class A
{
   public int Foo { get; set; }
}

public class B : A
{
   public int Bar { get; set; }
}

B は、追加情報を含む A の拡張として表示されます。

クラスAのインスタンスを持つことから始めます

A a = new A { Foo = 1 };

そして、クラス A の情報を追加情報で拡張し、最終的なクラス B を取得したいと考えています。クラス A のすべてのプロパティをクラス B のプロパティにマップできますが、あまり意味がありません。

A a = new A { Foo = 1 };
B b = new B { Foo = a.Foo, Bar = 2 };

またはコンストラクタで

A a = new A { Foo = 1 };
B b = new B(a) { Bar = 2 }; // Mapping of value Foo is done in constructor of object B

結果は、オブジェクト A から B への値の手動マッピングです。これを行うためのよりスマートな方法があるはずです...何か提案はありますか?

4

2 に答える 2

0

(キャストではなく)実際に型を変更する場合(クラスが少ない場合は、変換コードを記述するだけです)、おそらくそのためのctorBはテンプレートを受け入れますA。クラスがたくさんある場合は、動的コードまたはシリアル化のいずれかで実行できるトリックがあります。PropertyCopyたとえば、MiscUtilではこれを実行します(ダイナミックExpressionを使用して作業を非常に迅速に実行します)。

A a = new A { Foo = 1 };
B b = PropertyCopy<B>.CopyFrom(a);
b.Bar = 2;
于 2009-08-20T07:58:08.893 に答える
0

「スマートな」方法を最後の提案と見なします.Aからインスタンス化する方法を知っているBのコピーコンストラクターを作成します.

于 2009-08-20T07:51:52.167 に答える