如何转换这些类似类的实例?

时间:2013-01-10 10:58:52

标签: c# casting

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

3 个答案:

答案 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);