2012-02-28 22 views
1

私は、各代入可能なプロパティを1つずつ明示的に割り当てることなく、派生クラスの基本部分に基本クラスの変数から代入する方法を探しています。別の言い方をすると、基本クラスの変数から始めて、割り当て可能なすべての基本プロパティが設定された派生クラスの変数を最終的に作成したいと思います。変化する。派生クラスの基底部分に代入する

私は、編集しようとしているエンティティの基本クラスから派生クラスとしてビューモデルを作成します。通常は、ナビゲーションプロパティのIDを追加してPOSTによって返されるようにするだけです。例えば:私は、基本クラスThingにプロパティを追加し、私はThingEditViewを初期化する場所すべての場所を編集することを忘れたときに、私はトラブルに遭遇し、

var foo = new ThingEditView 
{ 
    UsefulID = thisThing.Useful.ID, 
    A = thisThing.A, 
    B = thisThing.B, 
    /* and potentially many more properties from the base class Thing */ 
}; 
return View(foo); 

しかし:

public class ThingEditView : Thing 
{ 
    public int UsefulID { get; set; } 
} 

それはこのように使用されますまたはThingDetailView、など私は

var foo = new ThingEditView 
{ 
    base = thisThing, 
    UsefulID = thisThing.Useful.ID 
}; 

を言うと、コンパイラが割り当てするフィールドを把握しましょうすることができるのが大好きです。これを行う方法はありますか?

洞察力ありがとう!

+2

おそらく[AutoMapper](http://automapper.org/)がお手伝いできます。 –

+0

合意された、Automapperのようなものが唯一の方法です。 – swannee

+0

ありがとうAndre(bedanke mich)とEric。 AutoMapperは私が望んでいたよりも少し重いようですが、まさに私が必要とするものです。奇妙なことにC#でこれを直接言う方法はありません。 Cの日で私は 'memcpy(... sizeof(Thing))'に達するでしょう。 –

答えて

2
void Main() 
{ 
    var thisThing= new ThingEditView {UsefulID = 1, A = 2, B = 3}; 
    var foo = new ThingEditView(thisThing); 

    //foo.Dump(); 
} 

// Define other methods and classes here 
public class Thing 
{ 
    public int A {get; set;} 
    public int B {get; set;}   
    public Thing() {} 
    public Thing(Thing thing) 
    {  
    this.A = thing.A; 
    this.B = thing.B; 
    } 
} 

public class ThingEditView : Thing 
{ 
    public int UsefulID {get; set;} 
    public ThingEditView() {} 
    public ThingEditView(Thing thing) : base(thing) { 

    } 
    public ThingEditView(ThingEditView view) : base(view) { 
     this.UsefulID = view.UsefulID; 
    } 
} 

私はオートマに選択します。

+0

アドリアンに感謝します。これはいいですが、 'ThingEditView'のコンストラクタを編集して' Thing'の編集内容を追跡する必要があります。 –

+0

わかっても分かりません。 Thingコンストラクタは独自のプロパティをコピーする責任があり、継承者が基底(ビュー) –

+1

を介してこのコードを呼び出すのに役立ちます...心配する必要はありません。これは私が探しているものです。ありがとう!! –

関連する問題