2013-09-25 3 views
1

У меня есть два объекта, такие как A: BКопировать значение из объекта базового класса объекта унаследованного класса

Я хочу, чтобы скопировать все значения от А до B во время выполнения

Код

Cow cow = db.Cows.Find(id); 

CowDetailViewModel model = new CowDetailViewModel(); // CowDetailViewModel : Cow 

Я хочу скопировать значение из переменной cow в модель. в CowDetailViewModel есть дополнительные свойства, которые я изменил бы после копирования значений.

+0

вы должны скопировать каждое свойство внутри «коров» к «модели» 'model.X = cow.X; модель.Y = корова.Y; ' и прочее. – AthibaN

+1

Первое правило просить о помощи: вы искали его сначала? [здесь] (http://stackoverflow.com/questions/1198886/c-sharp-using-reflection-to-copy-base-class-properties) и [здесь] (http://stackoverflow.com/questions/ 729527/is-it-possible-to-assign-a-base-class-object-to-a-output-class-reference-with-a) или [здесь] (http://stackoverflow.com/questions/9010123/создание-а-клонированная-копия-из-подкласса-из-BaseClass). Если работа для него не ваша вещь (см. Комментарий выше), используйте отражение. – bkdc

+0

Я знаю о копировании каждого свойства .. но я искал более необходимый способ ... У меня есть 10 свойств для копирования. –

ответ

1
CowDetailViewModel model = new CowDetailViewModel() 
{ 
    model.Property1 = cow.Property1, 
    model.Property2 = cow.Property2 
    //// 
    //// 
}; 
+1

или определить конструктор, который принимает экземпляр базового класса в качестве параметра и просто пишет 'CowDetailViewModel model = new CowDetailViewModel (cow);' – bkdc

0

Вы можете создать простой метод расширения, чтобы скопировать все открытые свойства

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)}); 
      } 
     } 
    } 
} 
Смежные вопросы