Как разыграть экземпляр этих похожих классов?
У меня есть два класса, которые являются производными от общего класса A, который содержит некоторые свойства (в основном, строки и целые числа). Класс B - это другой класс, содержащий дополнительные свойства. Точнее,
public class A1 : A {
private B _bee;
public B Bee {
get { return _bee;}
set { _bee = value;}
}
}
public class A2 : A {
private List<B> _beeList;
public List<B> BeeList {
get { return _beeList;}
set { _beeList = value;}
}
}
Теперь, учитывая экземпляр A1, как я могу создать экземпляр A2, содержащий ту же информацию (т. Е. Свойства в части "A" и экземпляр "B"). Я попробовал следующее - я хотел, чтобы это сработало, но знал, что это не сработает... - (Позвольте мне назвать мой экземпляр А1 или А2 "один" или "два"):
A _a = (A)one; // This obv works
B _b = one.Bee;
A2 _a2 = (A2)_a; // Threw away the Bee - information, so should work imo
_a2.BeeList.Add(_b);
Так как мне сделать это, не заполняя все свойства в A вручную?
3 ответа
using System.Reflection;
private void Convert(A1 _a1, A2 _a2)
{
foreach(PropertyInfo pi in typeof(A).GetProperties())
{
pi.SetValue(_a2,
pi.GetValue(_a1, null)
, null);
}
_a2.BeeList.Add(_a1.Bee);
}
мне показалось, что это работает
Попробуйте использовать autopper.
Automapper позволяет вам копировать свойства одного класса в другой без написания большого количества кода.
например:
Mapper.CreateMap<X, Y>();
Y y = Mapper.Map<X, Y>(x);
Конфигурация Automapper будет выглядеть так:
Mapper.CreateMap<A1, A2>()
.ForMember(a2 => a2.BeeList, ctx => ctx.MapFrom(a1 => new List<B>{a1.Bee}));
A a1Object = new A1{Bee = new B()};
A2 a2Object = Mapper.Map<A2>(a1Object);