A : B のような 2 つのオブジェクトがあります。
実行時に A から B にすべての値をコピーしたい
コード
Cow cow = db.Cows.Find(id);
CowDetailViewModel model = new CowDetailViewModel(); // CowDetailViewModel : Cow
牛変数からモデルに値をコピーしたい。CowDetailViewModel には、値をコピーした後に変更する追加のプロパティがあります。
A : B のような 2 つのオブジェクトがあります。
実行時に A から B にすべての値をコピーしたい
コード
Cow cow = db.Cows.Find(id);
CowDetailViewModel model = new CowDetailViewModel(); // CowDetailViewModel : Cow
牛変数からモデルに値をコピーしたい。CowDetailViewModel には、値をコピーした後に変更する追加のプロパティがあります。
CowDetailViewModel model = new CowDetailViewModel()
{
model.Property1 = cow.Property1,
model.Property2 = cow.Property2
////
////
};
すべてのパブリック プロパティをコピーする単純な拡張メソッドを作成できます。
public static class CopyHelper
{
public static void CopyFrom(this object target, object source)
{
foreach (var pS in source.GetType().GetProperties())
{
foreach (var pT in target.GetType().GetProperties())
{
if (pT.Name != pS.Name) continue;
(pT.GetSetMethod()).Invoke(target, new[] {pS.GetGetMethod().Invoke(source, null)});
}
}
}
}