0

我有两个派生自相互类 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 中的所有属性的情况下做到这一点呢?

4

3 回答 3

2

尝试使用自动映射器。

automapper 使您能够将一个类的属性复制到另一个类,而无需编写太多代码。

前任:

Mapper.CreateMap<X, Y>();    
Y y = Mapper.Map<X, Y>(x);
于 2013-01-10T11:01:28.333 回答
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);
    }

这似乎对我有用

于 2013-01-10T11:16:15.847 回答
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);
于 2013-01-10T11:11:17.990 回答