我有两个派生自相互类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'的实例)。我尝试了下面的内容 - 我希望它能够正常工作,但我知道它不会...... - (让我把我的A1和A2的实例称为'一个',分别为'两个'):
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中的所有属性的情况下这样做呢?
答案 0 :(得分:2)
尝试使用automapper。
automapper使您可以将类的属性复制到另一个类,而无需编写太多代码。
例如:
Mapper.CreateMap<X, Y>();
Y y = Mapper.Map<X, Y>(x);
答案 1 :(得分:2)
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);
}
这似乎对我有用
答案 2 :(得分:1)
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);