1

假设我有 2 个班级:A 和 B

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

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

我有一个来自 A 类的对象“a”,我想从 B 类创建一个对象“b”,它从“a”复制所有属性值。通常,我必须这样做:

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

使用此解决方案,如果必须手动分配,则必须丢失许多代码。有什么解决办法吗?谢谢。

4

2 回答 2

4

您可以考虑使用http://automapper.codeplex.com/ 之类的东西,它会使用预定义的规则自动将源对象的属性映射到目标对象。

那么它就像配置一次一样简单:

Mapper.CreateMap<A, B>();

并像这样创建新对象:

B b = Mapper.Map<B>(a);
于 2013-08-07T02:59:35.073 回答
0
  1. 如果愿意,您可以使用反射编写自己的 hydrator,这样它就会比较对象的属性、名称和类型。

  2. 或者您可以使用另一个答案中提到的自动映射器。

  3. 第三种解决方案是在代码中内化适应。既然“B”知道“A”,那么做

      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);
    
于 2013-08-07T03:18:24.407 回答