2009-08-20 45 views
1

私はあなたが普通にやることとは逆の方法を試みています。ベースオブジェクトから継承されたオブジェクトへの変換

Iは

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

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

BからBのinherrits付加情報とに拡張子としてメンター2つのPOCOクラスAおよびBを有します。

は、私はクラスのインスタンスを持つことから始め

A a = new A { Foo = 1 }; 

そして私は、追加情報でクラスAの情報を拡張し、私はクラスAからすべてのプロパティをマップすることができ、最終的なクラスBを取得したいですクラス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への値の手動マッピングが可能です。 これを行うにはよりスマートな方法が必要です...提案はありますか?

答えて

0

から自分自身をインスタンス化する方法を知っているBのためのコピーコンストラクタを書きます - 少数のクラスしかない場合は、Aというテンプレートを受け入れるBのコードを変換コードとして記述してください。クラスがたくさんある場合は、動的コードまたはシリアライズのいずれかを行うことができます。 MiscUtilPropertyCopyはこれを行います(たとえば、非常に迅速に仕事をするために、動的Expressionを使用して):maintainainceの悪夢につながる可能性が

A a = new A { Foo = 1 }; 
B b = PropertyCopy<B>.CopyFrom(a); 
b.Bar = 2; 
+0

マーク、私は反射を使用するようにあなたの提案が好きです。思考は私の心を渡りましたが、私はプロパティのコピー方法をコーディングしたくありませんでした。 MiscUtilへのリンクありがとう。それは私に貴重な時間を節約した。 –

0

私はあなたの最後の提案として「スマート」な方法を考えるだろう - あなたが実際に(という鋳造より)タイプを変更する場合A.

+0

私見。この例は非常に単純化されています。現在の実装では、最後の提案を使用します。 –

関連する問題