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
类的对象,我们想把它分配给A
类A
对象。
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
所有属性在Aclass 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, } } //... }
现在,只要你需要B
的A
,你就可以写:
var a = (A)b;
如果您无法访问A
或B
则可以实现扩展方法:
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类作为参数传递给此类