C#将B类中的对象分配给A类

我有两个课程。

A类:

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

B级:

 public class B { prop string p1 { get; set; } prop string p3 { get; set; } } 

现在假设我们有一个B类的对象,我们想把它分配给AA对象。

 B b_obj = new B(){ p1 = "something", p2 = "something else" } A a_obj = new A(){ p1 = b_obj.p1, p3 = b_obj.p3, } 

我认为上述解决方案不是最好的方法。

b_obj分配给A类中A另一个对象的最佳做法是什么?

提示: class B所有属性在A class B都具有类似的属性

您可以使用automapper http://automapper.org/然后您可以像这样使用它:

 AutoMapper.Mapper.CreateMap(); var a = ... var model = AutoMapper.Mapper.Map(a); 

您始终可以实现隐式或显式转换运算符:

 public class B { public static explicit operator A(B b) { return new A() { p1 = b_obj.p1, p3 = b_obj.p3, } } //... } 

现在,只要你需要BA ,你就可以写:

 var a = (A)b; 

如果您无法访问AB则可以实现扩展方法:

 public static A ToA(this B b) { return ... } 

使用方式类似:

 var a = b.ToA(); 

您可以使用AutoMapper (请参阅denisv的答案),它提供基于名称的类之间的映射。 然后,您可以根据需要自定义映射。

您还可以编写一些扩展方法:

 public static class Extensions { public A ToA(this B b) { return new A() { p1 = b_obj.p1, p3 = b_obj.p3, }; } } 

首先初始化B类并设置值。 然后创建这样一个类:

 public static void CopyPropertyValues(object source, object destination) { var destProperties = destination.GetType().GetProperties(); foreach (var sourceProperty in source.GetType().GetProperties()) { foreach (var destProperty in destProperties) { if (destProperty.Name == sourceProperty.Name && destProperty.PropertyType.IsAssignableFrom(sourceProperty.PropertyType)) { destProperty.SetValue(destination, sourceProperty.GetValue( source, new object[] { }), new object[] { }); break; } } } 

}

并将A和B类作为参数传递给此类