我有2个对象,对象A和对象B.A具有属性颜色和大小,B具有属性颜色,大小和深度.
A和B都继承自C,这是一个抽象类.
如何在运行时将B转换为A?
abstract class C {
}
Class A: C {
int color;
int size;
}
Class B: C {
int color;
int size;
int depth;
}
main() {
//creating object A
A objA = new A();
A.color = 46;
A.size = 90;
//creating object B
B objB = new B();
B.color = 23;
B.size = 10;
B.depth = 78;
//How to do casting
A = B;
}
Run Code Online (Sandbox Code Playgroud)
您可以向类中添加显式强制转换运算符B:
Class B: C {
int color;
int size;
int depth;
public static explicit operator A(B b)
{
return new A() {color = b.color, size = b.size};
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以转换B到A使用强制:
A a = (A)b;
Run Code Online (Sandbox Code Playgroud)
当我遇到这样的问题时,我使用了AutoMapper。
这是一个免费的库,您可以将一个对象映射到另一个对象,甚至可以将一个字段映射到另一个具有不同名称和类型的字段。
您也可以转换List<A>到List<B>这是很方便。
编辑
阅读您的最后评论后,我认为AutoMapper可能是您的解决方案。
您不需要明确指定除之外的任何内容。
AutoMapper.CreateMap<A,B>();
Run Code Online (Sandbox Code Playgroud)
然后,您可以映射;
B b = Mapper.Map<A,B>(sourceA);
Run Code Online (Sandbox Code Playgroud)
编辑2
或者,您可以自己使用反射,并创建一个以A作为参数的扩展,并将适当的字段/属性从A复制到B。