2013-08-07 2 views
1

Предположим, что у меня есть 2 классов: A & BCopy объекта находится между 2 унаследованных классов

public class A 
{ 
public string p1{get;set}; 
public string p2{get;set}; 
} 

public class B : A 
{ 
public string p3{get;set}; 
} 

У меня есть объект «а» из класса А, я хочу, чтобы создать объект «B» из класса B которые копируют все значения свойств из 'a'. Обычно я должен сделать следующее:

B b = new B(); 
b.p1 = a.p1; 
b.p2 = a.p2; 

С этим решением я должен потерять много кодов, если мне нужно назначить вручную. Есть ли какие-либо решения? Благодарю.

+2

использовать что-то вроде AutoMapper. – SLaks

+0

Вы можете использовать сериализатор (например, JSON) для сериализации A и десериализовать на B. – Plymouth223

ответ

4

Вы можете использовать что-то вроде http://automapper.codeplex.com/, которое автоматически отображает свойства исходного объекта в целевой объект для вас с использованием предопределенных правил.

, то его так же просто, как настройка раз так:

Mapper.CreateMap<A, B>(); 

И создания нового объекта, как это:

B b = Mapper.Map<B>(a); 
0
  1. Вы можете написать свой собственный увлажняющее, если вы хотите , используя отражение, поэтому он будет сравнивать свойства объекта, имена и типы.

  2. Или вы можете использовать automapper, как указано в другом ответе.

  3. Третье решение - интернализировать адаптацию в коде. Так как "B" знает о "А", сделать

    public class B : A 
        { 
         public string p3{get;set}; 
         public void Hydrate{A a} 
         { 
          this.p1 = a.p1; 
          this.p2 = a.p2; 
         } 
        } 
    

    Тогда ваш код будет как этот

    B b = new B(); 
        b.Hydrate(a); 
    
Смежные вопросы